Pagini recente » Cod sursa (job #1005856) | Cod sursa (job #2282368) | Cod sursa (job #705058) | Cod sursa (job #431549) | Cod sursa (job #2374464)
#include<bits/stdc++.h>
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
const int INF = 0x3f3f3f3f, Nmax = 18;
int dp[(1<<Nmax)+5][Nmax+5];
int n, m;
int a[Nmax+5][Nmax+5];
vector<int>v[Nmax+5];
int main()
{
f >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y, c;
f >> x >> y >> c;
a[x][y] = c;
v[x].push_back(y);
}
memset(dp, INF, sizeof(dp));
for (int i = 0; i < n; i++)
dp[1][i]=0;
for(int stare = 0; stare < (1<<n); stare++)
for (int i = 0; i < n; i++)
if(stare&(1<<i))
for(int j = 0; j < (int)v[i].size(); ++j)
{
int k = v[i][j];
if(stare & (1<<k))
dp[stare][i] = min(dp[stare][i], dp[stare^(1<<i)][k]+a[i][k]);
}
int ans=INF;
for (int i = 0; i < n; i++)
if(a[0][i]!=0)
ans=min(ans, dp[(1<<n)-1][i]+a[0][i]);
if(ans != INF)
g << ans;
else
g << "Nu exista solutie";
return 0;
}