Pagini recente » Cod sursa (job #2738646) | Cod sursa (job #2808714) | Cod sursa (job #2988946) | Cod sursa (job #2618970) | Cod sursa (job #1553839)
#include <cstdio>
#define maxv 1<<20
#define inf 0x3f3f3f3f
#include <algorithm>
using namespace std;
int N,M,a[18][18],c[18][maxv];
int part(int nod,int viz){
if(c[nod][viz] == 0){
c[nod][viz] = inf;
if(viz == (1<<nod) + 1)
c[nod][viz] = a[0][nod] ? a[0][nod] : inf;
else
for(int i = 0;i < N;++i)
if(a[i][nod]>0 && ((viz>>i) & 1))
c[nod][viz] = min(c[nod][viz],part(i,viz-(1<<nod))+a[i][nod]);
}
return c[nod][viz];
}
int main(){
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d ",&N,&M);
int x,y,z;
while(M--){
scanf("%d %d %d ",&x,&y,&z);
a[x][y] = z;
}
int rez = inf;
for(x = 0;x < N;++x)
if(a[x][0] > 0)rez = min(rez,a[x][0] + part(x,(1<<N)-1));
if(rez == inf)printf("Nu exista solutie\n");
else printf("%d\n",rez);
return 0;
}