Pagini recente » Cod sursa (job #1157335) | Cod sursa (job #1695611) | Cod sursa (job #2541859) | Cod sursa (job #2505604) | Cod sursa (job #2878211)
#include <fstream>
#include <vector>
using namespace std;
ifstream f("hamilton.in");
ofstream g("hamilton.out");
const int INF = 2e9;
int n, m;
int cost[19][19];
int dp[262145][19];
vector < int > adj[19];
int main()
{
f >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y, c; f >> x >> y >> c;
adj[y].push_back(x);
cost[x][y] = c;
}
for (int i = 0; i < (1 << n); i++)
for (int j = 0; j < n; j++)
dp[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 it : adj[j])
if (i && (1 << it))
dp[i][j] = min(dp[i][j], dp[i ^ (1 << j)][it] + cost[it][j]);
int ans = INF;
for (auto it : adj[0])
ans = min(ans, dp[(1 << n) - 1][it] + cost[it][0]);
if (ans != INF)
g << ans << "\n";
else
g << "Nu exista solutie" << "\n";
return 0;
}