Pagini recente » Cod sursa (job #1108330) | Cod sursa (job #2292572) | Cod sursa (job #3003444) | Cod sursa (job #2535582) | Cod sursa (job #2112828)
#include <fstream>
#include <vector>
#include <algorithm>
#define inf 100000000
using namespace std;
ifstream in("hamilton.in");
ofstream out("hamilton.out");
const int Nmax = 20;
const int Mmax = 262150;
int main()
{
int n, m, Sol = inf;
vector<int> A[Nmax];
vector<vector<int>> C(Mmax, vector<int>(Nmax));
vector<vector<int>> Cost(Nmax, vector<int>(Nmax));
in >> n >> m;
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
Cost[i][j] = inf;
for (int i = 1; i <= m; i++)
{
int x, y, z;
in >> x >> y >> z;
A[y].push_back(x);
Cost[x][y] = z;
}
int k = (1<<n);
for (int i = 0; i < k; i++)
for (int j = 0; j < n; j++)
C[i][j] = inf;
C[1][0] = 0;
for (int i = 0; i < k; i++)
for (int j = 0; j < n; j++)
if (i & (1<<j))
for (auto w = 0; w < A[j].size(); w++)
{
int nod = A[j][w];
if (i & (1<<nod))
C[i][j] = min (C[i][j], C[i ^ (1<<j)][nod] + Cost[nod][j]);
}
k--;
for (auto i = 0; i < A[0].size(); i++)
{
int nod = A[0][i];
Sol = min (Sol, C[k][nod] + Cost[nod][0]);
}
if (Sol == inf)
out << "Nu exista solutie";
else
out << Sol;
return 0;
}