Pagini recente » Cod sursa (job #320699) | Cod sursa (job #73658) | Cod sursa (job #2612165) | Cod sursa (job #979000) | Cod sursa (job #529896)
Cod sursa(job #529896)
#include <stdio.h>
int e,n,i,j,min=1000000000,d[280000][20],v[3][400],nn;
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d",&n,&e);
for (i=1;i<=e;++i)
scanf("%d%d%d",&v[0][i],&v[1][i],&v[2][i]);
for (i=1;i<=e;++i)
if (!v[0][i])
d[1+(1<<v[1][i])][v[1][i]]=v[2][i];
nn=1<<n;
for (i=1;i<nn-1;i+=2)
for (j=1;j<=e;++j)
if ((v[0][j])&&(d[i][v[0][j]])&&(v[1][j])&&((i/(1<<v[1][j]))%2==0)&&((!d[i+(1<<v[1][j])][v[1][j]])||(d[i+(1<<v[1][j])][v[1][j]]>d[i][v[0][j]]+v[2][j])))
{
d[i+(1<<v[1][j])][v[1][j]]=d[i][v[0][j]]+v[2][j];
}
for (i=1;i<=e;++i)
if ((!v[1][i])&&(min>d[nn-1][v[0][i]]+v[2][i]))
min=d[nn-1][v[0][i]]+v[2][i];
if (min==1000000000) printf("Nu exista solutie");
else printf("%d",min);
return 0;
}