Pagini recente » Cod sursa (job #2345799) | Cod sursa (job #2734668) | Cod sursa (job #3331799) | Cod sursa (job #1393276) | Cod sursa (job #3323820)
#include <bits/stdc++.h>
std::ifstream fin("hamilton.in");
std::ofstream fout("hamilton.out");
const int NMAX = 18;
const int INF = INT_MAX / 2;
int dp[1 << NMAX][NMAX];
int n, m;
std::vector<std::pair<int, int>> graph[NMAX];
int main() {
fin >> n >> m;
for(int i = 1; i <= m; ++i) {
int c, x, y;
fin >> c >> x >> y;
graph[x].push_back( { c, y } );
}
memset(dp, INF, sizeof(dp));
dp[1][1] = 0;
for(int mask = 0; mask < (1 << n); ++mask) {
if(mask & 1 == 0) {
continue;
}
for(int i = 1; i <= n; ++i) {
if(mask & (1 << (i - 1))) {
int prevMask = mask ^ (1 << (i - 1));
if(prevMask == 0) continue;
for(int j = 1; j <= n; ++j) {
if(prevMask & (1 << (j - 1))) {
dp[mask][i] = std::min(dp[mask][i], dp[prevMask][j] + graph[j][i].first);
}
}
}
}
}
int ans = INF;
for(int i = 2; i <= n; ++i) {
ans = std::min(ans, dp[1 << (n - 1)][i] + graph[i][1].first);
}
if (ans == INF) {
fout << "Nu exista solutie";
} else {
fout << ans;
}
return 0;
}