Pagini recente » Cod sursa (job #2319342) | Cod sursa (job #708363) | Cod sursa (job #910887) | Cod sursa (job #1876024) | Cod sursa (job #3284982)
#include <fstream>
#define INF 1000000000
using namespace std;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int c[20][20], n, m, dp[(1<<19)][20];
int main()
{
int i , j;
cin >> n >> m;
while(m--) {
int x, y, z;
cin >> x >> y >> z;
c[x][y] = z;
}
for(i=0;i<(1<<n);++i)
for(j=0;j<n;++j) dp[i][j]=INF;
dp[1][0] = 0;
for(int mask = 0; mask < (1 << n); ++mask) {
for(i = 0; i < n; ++i)
if(mask & (1 << i))
for(j = 0; j < n; ++j)
if(c[i][j] && !((1<<j)&mask))
dp[mask + (1<<j)][j] = min(dp[mask + (1<<j)][j], dp[mask][i] + c[i][j]);
}
int ans = INF;
for(int i = 0; i < n; ++i)
if(c[i][0])
ans = min(ans, dp[(1<<n) - 1][i] + c[i][0]);
if(ans == INF)
cout << "Nu exista solutie";
else
cout << ans;
return 0;
}