Pagini recente » Cod sursa (job #2553350) | Borderou de evaluare (job #1036573) | Cod sursa (job #1874782) | Cod sursa (job #1007481) | Cod sursa (job #2833444)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int n, m;
int w[19][19];
int a, b, c;
int dp[262145][19];
int minn = 1e9;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin >> n >> m;
for (int i = 1; i <= m; i++)
{
cin >> a >> b >> c;
w[a][b] = c;
}
for (int i = 0; i < (1 << n); i++)
{
for (int j = 0; j < n; j++)
{
dp[i][j] = 1e9;
}
}
dp[(1 << 0)][0] = 0;
for (int mask = 3; mask < (1 << n); mask++)
{
for (int r = 0; r < n; r++)
{
if ((mask & (1 << r)))
for (int l = 0; l < n; l++)
{
if ((mask & (1 << l)) && w[l][r])
{
dp[mask][r] = min(dp[mask][r], dp[mask ^ (1 << r)][l] + w[l][r]);
}
}
}
}
for (int i = 0; i < n; i++)
{
if (w[i][0] == 0) continue;
if (dp[(1 << n) - 1][i]+w[i][0] < minn) minn = dp[(1 << n) - 1][i]+w[i][0];
}
if (minn < 306000001)
cout << minn;
else cout << "Nu exista solutie";
return 0;
}