Pagini recente » Cod sursa (job #2696016) | Cod sursa (job #786115) | Cod sursa (job #2612415) | Cod sursa (job #609855) | Cod sursa (job #2432658)
#include <bits/stdc++.h>
using namespace std;
ifstream in("hamiltonian.in");
ofstream out("hamiltonian.out");
const int D1 = 20;
const int D2 = (1 << 18) + 7;
const int INF = 1e8;
int dp[D2][D1];
int c[D1][D1];
vector <int> v[D1];
main()
{
int n, m;
in >> n >> m;
for(int j = 0; j < n; j++)
{
for(int i = 0; i < (1 << n); i++)
dp[i][j] = INF;
for(int i = 0; i < n; i++)
c[i][j] = INF;
}
while(m--)
{
int x, y, w;
in >> x >> y >> w;
v[y].push_back(x);
c[x][y] = w;
}
dp[1][0] = 0;
for(int i = 0; i < (1 << n); i++)
for(int j = 0; j < n; j++)
if(i & (1 << j))
for(auto t : v[j])
if(i & (1 << t))
dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][t] + c[t][j]);
int minCost = INF;
for(auto i : v[0])
minCost = min(minCost, dp[(1 << n) - 1][i] + c[i][0]);
if(minCost == INF)
out << "Nu exista solutie\n";
else
out << minCost;
}