Pagini recente » Cod sursa (job #3155554) | Cod sursa (job #2771821) | Cod sursa (job #2021959) | Cod sursa (job #3279430) | Cod sursa (job #1491567)
#include <bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
int n,m,a,b,c;
int path[18][18];
int dp[1<<18][18];
int main(void){
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
cin>>n>>m;
memset(path,0,sizeof path);
while(m--){
cin>>a>>b>>c;
path[a][b] = c;
}
memset(dp,inf,sizeof dp);
//bottom-up bitmask_dp
dp[1][0]=0;
int ans= inf;
for (int mask = 0; mask<(1<<n); ++mask)
for (int i=0; i<n; ++i)
if (mask&(1<<i))
for (int j=0; j<n; ++j)
if (path[i][j]>0)
if (!(mask&(1<<j)))
dp[mask|(1<<j)][j] = min(dp[mask|(1<<j)][j],dp[mask][i] + path[i][j]);
//count solution
int sol = inf;
for (int i=0;i<n;++i)
if (path[i][0]>0)
sol = min(sol,dp[(1<<n)-1][i] + path[i][0]);
if (sol!=inf) cout<<sol;
else cout<<"Nu exista solutie";
return 0;
}