Pagini recente » Cod sursa (job #1681453) | Cod sursa (job #2275466) | Cod sursa (job #2795931) | Cod sursa (job #819147) | Cod sursa (job #2716740)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("hamilton.in");
ofstream fout("hamilton.out");
#define nr 1000000001
int n, m, cost[20][20], dp[1 << 19][19];
vector <int> V[20];
int main()
{
fin >> n >> m;
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
cost[i][j] = nr;
}
}
for (int i = 1; i <= m; ++i) {
int x, y, c;
fin >> x >> y >> c;
cost[x][y] = c;
V[y].push_back(x);
}
for (int i = 0; i < (1 << n); ++i) {
for (int j = 0; j < n; ++j) {
dp[i][j] = nr;
}
}
dp[1][0] = 0;
int mini = INT_MAX;
for (int mask = 1; mask < (1 << n); ++mask) {
for (int i = 0; i < n; ++i) {
if (mask & (1 << i)) {
for (vector <int> :: iterator it = V[i].begin(); it != V[i].end(); ++it) {
if (mask & (1 << *it)) {
dp[mask][i] = min(dp[mask][i], dp[mask ^ (1 << i)][*it] + cost[*it][i]);
}
}
}
}
}
int mask = (1 << n) - 1, ans = INT_MAX;
for (vector <int> :: iterator it = V[0].begin(); it != V[0].end(); ++it) {
ans = min(ans, dp[mask][*it] + cost[*it][0]);
}
if (ans == INT_MAX)
fout << "Nu exista solutie";
else
fout << ans;
return 0;
}