Pagini recente » Cod sursa (job #1387829) | Cod sursa (job #2599575) | Cod sursa (job #409959) | Cod sursa (job #2549680) | Cod sursa (job #1563167)
#include <cstdio>
#include <cstring>
#include <algorithm>
const int DIM = 18;
const int INF = 0x3f3f3f3f;
using namespace std;
int D[1 << DIM][DIM], C[DIM][DIM], N, M, minim, X, Y, Z;
inline int solve( int msk, int i ) {
if (msk == 1 && i == 0) return 0;
if( D[msk][i] ) return D[msk][i];
D[msk][i] = INF;
for( int j = 0; j < N; j ++ )
if( ((msk >> j) & 1) && i != j )
D[msk][i] = min( D[msk][i], solve( msk - (1 << i), j ) + C[j][i] );
return D[msk][i];
}
int main () {
freopen( "hamilton.in" ,"r", stdin );
freopen( "hamilton.out","w", stdout );
memset( C, INF, sizeof( C ));
scanf( "%d %d", &N, &M );
for( int i = 1; i <= M; i ++ ) {
scanf( "%d %d %d", &X, &Y, &Z );
C[X][Y] = Z;
}
minim = INF;
for( int i = 0; i < N; i ++ )
D[0][i] = 0;
for( int i = 1; i < N; i ++ )
minim = min( minim, solve( (1 << N) - 1, i ) + C[i][0] );
if( minim != INF )
printf( "%d\n", minim );
else
printf( "Nu exista solutie\n" );
return 0;
}