Pagini recente » Cod sursa (job #1752987) | Cod sursa (job #1244895) | Cod sursa (job #1999641) | Cod sursa (job #825829) | Cod sursa (job #2456487)
#include <bits/stdc++.h>
#define MOD 1000000007
using namespace std;
int dp[(1 << 19)][20];
int mat[20][20];
int main()
{
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int n,m,i,j,x,y,cost;
cin >> n >> m;
for(i = 1; i <= m; i++)
{
cin >> x >> y >> cost;
mat[x][y] = cost;
}
int finalstate = (1<<n) - 1;
for(int i = 0 ; i < n ; i++)
{
for(int j = 1 ; j <= finalstate; j++)
{
dp[j][i] = 2e9;
}
}
int minim = 2e9;
dp[1][0] = 0;
for(i = 1; i <= finalstate; i++)
{
for(int last = 0; last < n; last++)
{
if((i & (1 << last))!=0)
{
for(j = 0; j < n; j++)
{
if(((i & (1 << j)) == 0) && mat[last][j] > 0)
{
dp[i | (1 << j)][j] = min(dp[i | (1 << j)][j],dp[i][last] + mat[last][j]);
}
}
}
}
}
for(i = 1; i < n; i++)
{
if(mat[i][0] > 0)
{
minim = min(minim,dp[finalstate][i] + mat[i][0]);
}
}
if(minim != 2e9)
cout << minim;
else
cout << "Nu exista solutie";
return 0;
}