Pagini recente » Cod sursa (job #2713208) | Cod sursa (job #2570797) | Cod sursa (job #2713623) | Cod sursa (job #3290061) | Cod sursa (job #2707183)
#include <fstream>
using namespace std;
ifstream fin ("hamilton.in");
ofstream fout ("hamilton.out");
int n, m;
int ans, adj[20][20], DP[131100];
int bit[20];
int bkt ( int l, int prev, int cost, int mask ) {
if ( DP[mask] )
return DP[mask];
if ( l >= n ) {
if ( adj[prev][0] )
return cost + adj[prev][0];
}
for ( int i = 1; i < n; i++ ) {
if ( !( mask & bit[i] ) && adj[ prev ][ i ] ) {
int res = bkt ( l+1, i, cost + adj[prev][i], mask | bit[i] );
if ( DP[mask] )
DP[mask] = min ( DP[mask], res );
else
DP[mask] = res;
}
}
return DP[mask];
}
void init () {
int aux = 1;
for ( int i = 0; i < 18; i++ ) {
bit[i] = aux << i;
}
}
void solve () {
init();
ans = bkt ( 1, 0, 0, 0);
if ( !ans )
fout << "Nu exista solutie";
else
fout << ans << "\n";
}
void read () {
fin >> n >> m;
int from, to, cost;
for ( int i = 1; i <= m; i++ ) {
fin >> from >> to >> cost;
adj[ from ][ to ] = cost;
//adj[ to ][ from ] = cost;
}
}
int main()
{
read ();
solve ();
return 0;
}