Pagini recente » Cod sursa (job #2761736) | Cod sursa (job #3040273) | Cod sursa (job #2839120) | Cod sursa (job #1253488) | Cod sursa (job #3041482)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
///#include <tryhardmode>
///#include <GODMODE::ON>
using namespace std;
#define cin fin
#define cout fout
ifstream fin ("hamilton.in");
ofstream fout ("hamilton.out");
const int NMAX=25;
const int MASK=(1<<21);
const int INF=2e9;
int dp[MASK][NMAX];
int dp2[NMAX][NMAX];
int main()
{
int n,m,i,j,x,y,cost,mask;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>x>>y>>cost;
dp2[x][y]=cost;
}
for(i=0;i<(1<<n);i++)
for(j=0;j<n;j++)
dp[i][j]=INF;
dp[0][0]=dp[1][0]=0;
for(mask=1;mask<(1<<n);mask++)
for(i=0;i<n;i++)
{
if(mask & (1<<i))
{
for(j=0;j<n;j++)
{
if(!(mask & (1<<j)) && dp2[i][j])
dp[mask^(1<<j)][j]=min(dp[mask^(1<<j)][j],dp[mask][i]+dp2[i][j]);
}
}
}
int mini=INF;
for(i=0;i<n;i++)
{
if(dp2[i][0])
mini=min(mini,dp[(1<<n)-1][i]+dp2[i][0]);
}
if(mini==INF)
cout<<"Nu exista solutie";
else
cout<<mini;
return 0;
}