Pagini recente » Cod sursa (job #1055912) | Cod sursa (job #3225061) | Cod sursa (job #208414) | Cod sursa (job #2071046) | Cod sursa (job #1505137)
#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 dp[(1 << MAX)][MAX], n, m, gr[MAX][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[mask][i] = inf;
dp[1][0] = 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[new_mask][j] = min(dp[new_mask][j], dp[mask][i] + gr[i][j]);
}
int sol = inf;
for (int i = 0; i < n; i++)
if (gr[i][0])
sol = min(dp[(1 << n) - 1][i] + gr[i][0], sol);
if (sol == inf)
fout << "Nu exista solutie";
else fout << sol;
return 0;
}