Pagini recente » Cod sursa (job #2652120) | Cod sursa (job #1831909) | Cod sursa (job #2745355) | Cod sursa (job #3214951) | Cod sursa (job #1232791)
#include <cstdio>
#include <algorithm>
using namespace std;
int n,m,x,y,c,C[18][18],sol[1<<18][18],i,N,mask,j,ans,Mask;
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d%d",&n,&m);
for(;m;m--)
{
scanf("%d%d%d",&x,&y,&c);
C[x][y]=c;
}
for(i=0;i<n-1;i++)
sol[1<<i][i]=C[n-1][i];
N=(1<<(n-1))-1;
for(mask=1;mask<=N;mask++)
for(i=0;i<n-1;i++)
{
if(sol[mask][i])
{
for(j=0;j<n-1;j++)
{
if(!(mask&(1<<j))&&C[i][j])
{
Mask=mask|(1<<j);
if(sol[Mask][j])
sol[Mask][j]=min(sol[Mask][j],C[i][j]+sol[mask][i]);
else
sol[Mask][j]=C[i][j]+sol[mask][i];
}
}
}
}
ans=18000010;
for(i=0;i<n-1;i++)
if(sol[N][i]&&C[i][n-1])
ans=min(ans,(sol[N][i]+C[i][n-1]));
if(ans==18000010)
printf("Nu exista solutie\n");
else
printf("%d\n",ans);
return 0;
}