Pagini recente » Cod sursa (job #2246916) | Cod sursa (job #1122472) | Cod sursa (job #1826916) | Cod sursa (job #683813) | Cod sursa (job #2036171)
#include <fstream>
#include <bitset>
#define in "hamilton.in"
#define out "hamilton.out"
#define N 20
#define oo 2e8
using namespace std;
ifstream fin(in);
ofstream fout(out);
int n,m,c,x,y;
int cmin = oo;
int v[N][N]; //verificam daca exista dupa n noduri parcurse drum de la nodul actual la cel initial
int init;
bitset<N> f;
void citire()
{
fin>>n>>m;
while(m--)
{
fin>>x>>y>>c;
v[x][y] = c;
}
}
inline void BK(const int &nod,const int &ct,const int &cost) // parcurgem nodul nod, am parcurs ct noduri. costul actual este cost
{
if(ct == n)
{
if(v[nod][init] != 0)
cmin = min(cmin,cost + v[nod][init]);
}
else
{
for(int i=0; i<n; ++i)
if(!f[i] && v[nod][i] != 0)
{
f[i] = 1;
BK(i, ct+1, cost + v[nod][i]);
f[i] = 0;
}
}
}
int main()
{
citire();
for(int i=0; i<n; ++i)
{
f[i] = 1;
init = i;
BK(i,1,0);
f[i] = 0;
}
if(cmin != oo) fout<<cmin<<"\n";
else fout<<"Nu exista solutie";
fin.close(); fout.close();
return 0;
}