Pagini recente » Cod sursa (job #1354909) | Cod sursa (job #1674663) | Cod sursa (job #1439110) | Cod sursa (job #1522813) | Cod sursa (job #2444516)
#include <bits/stdc++.h>
using namespace std;
ifstream fi("hamilton.in");
ofstream fo("hamilton.out");
const int INF = 1e8;
int n, m;
int C[20][20];
int dp[20][(1 << 18)];
int getDp(int nod, int mask)
{
if (dp[nod][mask])
return dp[nod][mask];
if (mask == (1 << n) - 1)
{
if (C[nod][1])
dp[nod][mask] = C[nod][1];
else
dp[nod][mask] = INF;
return dp[nod][mask];
}
dp[nod][mask] = INF;
for (int i = 1; i <= n; i++)
{
if (C[nod][i] && (mask & (1 << (i - 1))) == 0)
{
dp[nod][mask] = min(dp[nod][mask], C[nod][i] + getDp(i, (mask | (1 << (i - 1)))));
}
}
return dp[nod][mask];
}
int main()
{
fi >> n >> m;
for (int i = 1; i <= m; i++)
{
int u, v, c;
fi >> u >> v >> c;
u++; v++;
C[u][v] = c;
}
int val = getDp(1, 1);
if (val == INF)
fo << "Nu exista solutie";
else
fo << val;
return 0;
}