Pagini recente » Cod sursa (job #3145737) | Cod sursa (job #2200462) | Cod sursa (job #2772619) | Cod sursa (job #1530932) | Cod sursa (job #1898361)
#include <fstream>
#include <vector>
#include <algorithm>
#define INF 4231567890
using namespace std;
unsigned long long sol = INF, f = 0;
vector <vector <int> > a;
vector <int> q;
void read()
{
ifstream cin("hamilton.in");
int n, m;
cin >> n >> m;
a.resize(n);
for (int i = 0; i < n; i++)
{
a[i].resize(n);
for (int j = 0; j < n; j++)
a[i][j] = -1;
}
for (int i = 0, x, y, q; i < m; i++)
cin >> x >> y, cin >> a[x][y];
cin.close();
}
void solve(int x)
{
if (q.size() == a.size())
{
if (a[ q[q.size() - 1] ][f] == -1) return;
for (int i = 0; i < q.size(); i++)
if (count(q.begin(), q.end(), q[i]) > 1) return;
unsigned long long y = a[ q[q.size() - 1] ][f];
for (int i = 1; i < q.size(); i++)
y += a[ q[i - 1] ][ q[i] ];
sol = min(y, sol);
return;
}
for (int i = 0; i < a.size(); i++)
if (a[x][i] != -1)
{
q.push_back(i);
solve(i);
q.pop_back();
}
}
int main()
{
read();
for (; f < a.size(); f++)
{
q.push_back(f);
solve(f);
q.pop_back();
}
ofstream cout("hamilton.out");
if (sol == INF)
cout << "Nu exista solutie";
else cout << sol;
cout.close();
return 0;
}