Pagini recente » Cod sursa (job #2767320) | Cod sursa (job #1965560) | Cod sursa (job #2491914) | Cod sursa (job #493514) | Cod sursa (job #2216219)
#include <fstream>
#include <vector>
using namespace std;
ifstream in("hamilton.in");
ofstream out("hamilton.out");
const int MAXN = 18;
const int MAXM = 306;
const int MAXVAL = 1e6;
const int INF = MAXVAL * MAXM + 1;
vector<int> g[MAXN];
int n, m;
int c[MAXN][MAXN];
int dp[1 << MAXN][MAXN];
int main() {
in >> n >> m;
for (int i = 1; i <= m; ++ i) {
int a, b;
in >> a >> b;
g[b].push_back(a);
in >> c[a][b];
}
for (int i = 0; i < 1 << n; ++ i) for (int j = 0; j < n; ++ j) dp[i][j] = INF;
for (int i = 0; i < n; ++ i) for (int j = 0; j < n; ++ j) if (c[i][j] == 0) c[i][j] = INF;
dp[1][0] = 0;
for (int i = 0; i < (1 << n); ++ i) {
for (int j = 0; j < n; ++ j) {
if (i & (1 << j)) {
for (auto x : g[j]) {
if (i & (1 << x))
dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][x] + c[x][j]);
}
}
}
}
int sol = INF;
for (int i = 0; i < n; ++ i) {
sol = min(sol, dp[(1 << n) - 1][i] + c[i][0]);
}
if (sol == INF) out << "Nu exista solutie";
else out << sol;
return 0;
}