Pagini recente » Cod sursa (job #1967546) | Cod sursa (job #587514) | Cod sursa (job #1403087) | Istoria paginii utilizator/crisovidiu | Cod sursa (job #1209566)
#include <cstdio>
#include <algorithm>
#define INF 1000000000
using namespace std;
int dp[(1<<20)][20],C[20][20];
int main()
{
int M,a,b,c,i,j,k,N,sol=INF;
freopen ("hamilton.in","r",stdin);
freopen ("hamilton.out","w",stdout);
scanf("%d%d", &N,&M);
for(i=1;i<=N;++i)
for(j=1;j<=N;++j)
C[i][j]=INF;
while(M--)
{
scanf("%d%d%d", &a,&b,&c);
++a; ++b;
C[a][b]=c;
}
for(i=0;i<(1<<N);++i)
for(j=1;j<=N;++j)
dp[i][j]=INF;
for(i=1;i<=N;++i)
dp[(1<<(i-1))][i]=0;
for(i=2;i<(1<<N);++i)
for(j=1;j<=N;++j)
if(((1<<(j-1))&i) && i-(1<<(j-1)))
for(k=1;k<=N;++k)
if(k!=j && ((1<<(k-1))&i))
dp[i][j]=min(dp[i][j],dp[i-(1<<(j-1))][k]+C[k][j]);
for(i=2;i<=N;++i)
sol=min(sol,dp[(1<<N)-1][i]+C[i][1]);
if(sol==INF)
printf("Nu exista solutie\n");
else
printf("%d\n", sol);
return 0;
}