Pagini recente » Cod sursa (job #2188904) | Cod sursa (job #2490195)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("hamilton.in");
ofstream fout ("hamilton.out");
#define NMAX 23
#define MAXX 262145
#define INF 100000003
int cost [NMAX][NMAX], C [MAXX][NMAX];
vector <int>v [NMAX];
int n, m, x, y, ans = INF;
int main(){
fin >> n >> m;
for (int i = 0; i < n; i ++)
for (int j = 0; j < n; j ++)
cost [i][j] = INF;
for (int i = 0; i < (1 << n); i ++)
for (int j = 0; j < n; j ++)
C [i][j] = INF;
C [1][0] = 0;
for (int i = 1; i <= m; i ++){
fin >> x >> y;
v [y].push_back (x);
fin >> cost [x][y];
}
for (int i = 0; i < (1 << n); i ++){
for (int j = 0; j < n; j ++){
if (i & (1 << j)){
for (int k = 0; k < v [j].size (); k ++)
if (i & (1 << v [j][k]))
C [i][j] = min (C [i][j], C [i ^ (1 << j)][v [j][k]]
+ cost [v [j][k]][j]);
}
}
}
for (int i = 0; i < v [0].size (); i ++)
ans = min (ans, C [(1 << n) - 1][v [0][i]] + cost [v [0][i]][0]);
if (ans == INF)
fout << "Nu exista solutie";
else fout << ans;
return 0;
}