Pagini recente » Cod sursa (job #3184287) | Cod sursa (job #109520) | Cod sursa (job #674802) | Cod sursa (job #225298) | Cod sursa (job #2892288)
#include <bits/stdc++.h>
#define MAX_N 18
#define MULT (1 << 29)
using namespace std;
int cost[MAX_N][MAX_N], dp[1 << MAX_N][MAX_N];
vector <int> invEdges[MAX_N];
int main() {
ifstream cin( "hamilton.in" );
ofstream cout( "hamilton.out" );
int n, m, minCost, mask, u, v, c;
cin >> n >> m;
for ( u = 0; u < n; u++ ) {
for ( v = 0; v < n; v++ )
cost[u][v] = MULT;
}
while ( m-- ) {
cin >> u >> v >> c;
invEdges[v].push_back( u );
cost[u][v] = c;
}
for ( mask = 1; mask < (1 << n); mask++ ) {
for ( u = 0; u < n; u++ )
dp[mask][u] = MULT;
}
dp[1][0] = 0;
for ( mask = 1; mask < (1 << n); mask++ ) {
for ( v = 0; v < n; v++ ) {
if ( mask & (1 << v) ) {
for ( int u: invEdges[v] ) {
if ( mask & (1 << u) )
dp[mask][v] = min( dp[mask][v], dp[mask - (1 << v)][u] + cost[u][v] );
}
}
}
}
minCost = MULT;
for ( u = 0; u < n; u++ )
minCost = min( minCost, dp[(1 << n) - 1][u] + cost[u][0] );
if ( minCost == MULT )
cout << "Nu exista solutie";
else
cout << minCost;
return 0;
}