Pagini recente » Cod sursa (job #1698666) | Cod sursa (job #2421076) | Cod sursa (job #1384646) | Cod sursa (job #263976) | Cod sursa (job #1506551)
#include <bits/stdc++.h>
#define pb push_back
#define f first
#define s second
#define pii pair<int, int>
#define mp make_pair
using namespace std;
const string name = "hamilton",
in_file = name + ".in",
out_file = name + ".out";
ifstream fin(in_file);
ofstream fout(out_file);
const int MAX = 18, inf = (1 << 30) - 1;
int n, m, gr[MAX][MAX], dp[MAX][(1 << MAX)];
int main() {
fin >> n >> m;
for (int a, b, c; m; m--) {
fin >> a >> b >> c;
gr[a][b] = c;
}
for (int mask = 0; mask < (1 << n); mask++)
for (int i = 0; i < n; i++)
dp[i][mask] = inf;
dp[0][1] = 0;
for (int mask = 1; mask < (1 << n); mask++)
for (int i = 0; i < n; i++)
if (mask & (1 << i))
for (int j = 0; j < n; j++)
if ((mask & (1 << j)) == 0 && gr[i][j]) {
int new_mask = mask + (1 << j);
dp[j][new_mask] = min(dp[j][new_mask], dp[i][mask] + gr[i][j]);
}
int sol = inf;
for (int i = 0; i < n; i++)
if (gr[i][0])
sol = min(dp[i][(1 << n) - 1] + gr[i][0], sol);
if (sol == inf)
fout << "Nu exista solutie";
else fout << sol;
return 0;
}