Pagini recente » Cod sursa (job #2387535) | Cod sursa (job #3149869) | Cod sursa (job #2387389) | Cod sursa (job #1950570) | Cod sursa (job #1557256)
#include <iostream>
#include <cstdio>
#include <vector>
using namespace std;
const int oo = 1e8;
int main() {
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out", "w", stdout);
int n, m;
cin >> n >> m;
vector<vector<int>> adjm(n, vector<int>(n, oo));
for (int i = 0; i < m; i++) {
int u, v, w;
cin >> u >> v >> w;
adjm[u][v] = w;
}
vector<vector<int>> lenpath(1<<n-1, vector<int>(n-1, oo));
for (int i = 0; i < n-1; i++) {
lenpath[1<<i][i] = adjm[i][n-1];
}
for (int mask = 1; mask < 1<<n-1; mask++) {
for (int mask1 = mask; mask1 != 0; mask1 &= mask1-1) {
int i = __builtin_ctz(mask1);
for (int mask2 = mask^1<<i; mask2 != 0; mask2 &= mask2-1) {
int j = __builtin_ctz(mask2);
lenpath[mask][i] = min(lenpath[mask][i],
lenpath[mask^1<<i][j]+adjm[i][j]);
}
}
}
int ans = oo;
for (int i = 0; i < n-1; i++) {
ans = min(ans, lenpath[(1<<n-1)-1][i]+adjm[n-1][i]);
}
printf("%d\n", ans < oo ? ans : "Nu exista solutie");
}