Pagini recente » Cod sursa (job #208725) | Cod sursa (job #3322228) | Cod sursa (job #1736673) | Cod sursa (job #1138201) | Cod sursa (job #3341335)
#include <fstream>
#define INF 100000000
using namespace std;
ifstream cin("hamilton.in");
ofstream cout("hamilton.out");
int N, M, dist[20][20], a, b, c, memo[1 << 18][20];
int solve( int mask, int x)
{
if(mask == (1 << N) - 1)
{
if(dist[x][0] != INF)
return dist[x][0];
else return INF;
}
if(memo[mask][x] != -1)
return memo[mask][x];
int cost_min = INF;
for(int k = 0; k < N; k++)
{
if(!(mask & (1 << k)) and dist[x][k] != INF){
int cost = dist[x][k] + solve( mask | (1 << k), k);
cost_min = min( cost_min, cost );
}
}
memo[mask][x] = cost_min;
return cost_min;
}
int main()
{
cin >> N >> M;
for(int i = 0; i < N; i++)
for(int j = 0; j < N; j++)
dist[i][j] = INF;
for(int i = 1; i <= M; i++)
{
cin >> a >> b >> c;
dist[a][b] = c;
}
for(int k = 0; k < (1<<N); k++)
for(int i = 0; i < N; i++)
memo[k][i] = -1;
int ans = solve(1, 0);
if(ans >= INF)
cout << "Nu exista solutie";
else
cout << ans;
return 0;
}