Pagini recente » Cod sursa (job #2646352) | Cod sursa (job #2401173) | Cod sursa (job #1637494) | Cod sursa (job #682104) | Cod sursa (job #595147)
Cod sursa(job #595147)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
using namespace std;
#define MAXN 20
#define INF 0x3f3f3f3f
int n, m, c[1 << MAXN][MAXN];
vector <pair <int, int> > g[MAXN];
typedef vector <pair <int, int> >::iterator iter;
int main ()
{
fstream fin ("hamilton.in", ios::in);
fstream fout ("hamilton.out", ios::out);
fin >> n >> m;
for (int i = 0, x, y, z; i < m; ++i) {
fin >> x >> y >> z;
g[x].push_back (make_pair (y, z));
}
memset (c, 0x3f, MAXN * (1 << MAXN) * sizeof (int));
c[1][0] = 0;
for (int i = 1; i < (1 << n); ++i) {
for (int j = 0; j < n; ++j) {
if (i & (1 << j) == 0)
continue;
for (iter it = g[j].begin (); it != g[j].end (); ++it) {
if (i & (1 << it->first) == 0)
continue;
c[i][j] = min (c[i][j], c[i ^ (1 << j)][it->first] + it->second);
}
}
}
int sol = INF;
for (iter it = g[0].begin (); it != g[0].end (); ++it) {
sol = min (sol, c[(1 << n) - 1][it->first] + it->second);
}
sol == INF ? (fout << "Nu exista solutie" << endl) : (fout << sol << endl);
fin.close ();
fout.close ();
return 0;
}