Pagini recente » Cod sursa (job #2811179) | Cod sursa (job #957561) | Cod sursa (job #3226558) | Cod sursa (job #233160) | Cod sursa (job #2126950)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
int n,m,a,b,c;
const int INF = 0x3f3f3f3f;
vector <int> g[18];
int d[18][1<<18];
int ct[18][18];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d", &n,&m);
for(int i=0;i<m;++i)
{
scanf("\n%d %d %d", &a, &b,&c);
ct[a][b]=c;
g[b].push_back(a);
}
for(int i=0;i<n;++i)
{
for(int j=0;j<(1<<n);++j)
d[i][j]=INF;
}
d[0][1]=0;
for(int i=0;i<n;++i)
{
for(int j=0;j<(1<<n);++j)
{
if(j && (1<<i))
{
for(int k:g[i])
{
if(j && (1<<k))
{
d[i][j]=min(d[i][j], d[k][j^(1<<i)]+ct[k][i]);
}
}
}
}
}
int rez=INF;
for(int i:g[0])
{
rez=min(rez,d[i][(1<<n)-1]+ct[i][0]);
}
if(rez!=INF)
cout<<rez;
else
cout<<"Nu exista solutie";
return 0;
}