Pagini recente » Cod sursa (job #575296) | Cod sursa (job #3291555) | Cod sursa (job #214230) | Cod sursa (job #2345387) | Cod sursa (job #2341558)
#include <iostream>
#include <fstream>
#include <cstring>
#include <vector>
#define INF 0x3f3f3f3f
#define Nmax 19
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
int n, m, x, y, c;
int ans=INF;
int a[Nmax][Nmax];
int ham[(1<<Nmax)+5][Nmax];
vector <int> v[Nmax];
int main()
{
f >> n >> m;
for (int i = 1; i <= m; i++)
{
f >> x >> y >> c;
a[x][y]=c;
v[x].push_back(y);
}
memset(ham, INF, sizeof(ham));
for (int i = 0; i < n; i++)
ham[0][i]=ham[1][i]=0;
int p = (1<<n);
for (int st=0; st < p; st++)
for (int i = 0; i < n; i++)
if(st&&(1<<i))
{
for (auto it:v[i])
ham[st][i]=min(ham[st][i], ham[st^(1<<i)][it]+a[it][i]);
}
for (int i = 1; i < n; i++)
if(a[0][i] != 0) ans=min(ans, ham[p-1][i]+a[0][i]);
if(ans==INF) g << "Nu exista solutie";
else g << ans;
return 0;
}