Pagini recente » Cod sursa (job #2841028) | Cod sursa (job #1843239) | Cod sursa (job #2380768) | Cod sursa (job #3290279) | Cod sursa (job #432073)
Cod sursa(job #432073)
#include <stdio.h>
const int INF=1<<29;
int d[262145][18],c[18][18];
int main(){
freopen("hamilton.in","r",stdin); freopen("hamilton.out","w",stdout);
int n,m,i,j,k,x,y,z,L;
scanf("%d %d",&n,&m);
for (i=0;i<n;++i) for (j=0;j<n;++j) c[i][j]=INF;
for (i=1;i<=m;++i){
scanf("%d %d %d",&x,&y,&z);
c[x][y]=z;
}
L=1<<n;
for (i=0;i<L;++i)for (j=0;j<n;++j) d[i][j]=INF;
d[1][0]=0;
//for (i=1,j=0;i<L;i<<=1,j++)d[i][j]=0;
for (i=0;i<L;++i)
for (j=0;j<n;++j)
if ((i&(1<<j)))
for (k=0;k<n;++k)
if (k!=j && (i&(1<<k)))
if (d[i][j] > d[i^(1<<j)][k] + c[k][j])
d[i][j] = d[i^(1<<j)][k] + c[k][j];
x=d[L-1][0];
for (i=1;i<n;++i)if (d[L-1][i]+c[i][0]<x)x=d[L-1][i]+c[i][0];
if (x==INF)printf("Nu exista solutie\n"); else printf("%d\n",x);
return 0;
}