Pagini recente » Cod sursa (job #2866556) | Cod sursa (job #2061949) | Cod sursa (job #1649621) | Cod sursa (job #2275859) | Cod sursa (job #2935359)
#include <fstream>
#include <climits>
#include <vector>
using namespace std;
const int NMAX = 19;
int dp[NMAX][(1 << NMAX)];
int cost[NMAX][NMAX];
vector <int> g[NMAX];
int main() {
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int n, m, i, mask, j;
cin >> n >> m;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
cost[i][j] = INT_MAX / 2;
for (i = 1; i <= m; i++) {
int a, b, c;
cin >> a >> b >> c;
cost[a][b] = c;
g[a].push_back(b);
g[b].push_back(a);
}
for (mask = 0; mask < (1 << n); mask++)
for (i = 0; i < n; i++)
dp[i][mask] = INT_MAX / 2;
dp[0][1] = 0;
for (mask = 1; mask < (1 << n); mask++) {
for (i = 0; i < n; i++)
if (mask & (1 << i))
for (int u : g[i])
if (mask & (1 << u))
dp[i][mask] = min(dp[u][mask - (1 << i)] + cost[u][i], dp[i][mask]);
}
int ans = INT_MAX / 2;
for (i = 0; i < n; i++) {
ans = min(ans, dp[i][(1 << n) - 1] + cost[i][0]);
//cout << dp[i][(1 << n) - 1] << "\n";
}
if (ans == INT_MAX / 2)
cout << "Nu exista solutie";
else
cout << ans;
}