Pagini recente » Cod sursa (job #2968740) | Cod sursa (job #305946) | Cod sursa (job #3193912) | Cod sursa (job #2625487) | Cod sursa (job #2297758)
#include <bits/stdc++.h>
#define maxn 18
#define inf INT_MAX / 2
using namespace std;
int ad[maxn+5][maxn+5];
int dp[(1<<maxn)+5][maxn];
int n, m;
int calc ( int conf, int nod )
{
if ( dp[conf][nod] < inf )
return dp[conf][nod];
int i;
for ( i = 0; i < n; i++ )
if ( (conf & (1<<i)) && ad[i][nod] < inf )
dp[conf][nod] = min ( dp[conf][nod], calc (conf-(1<<nod), i) + ad[i][nod] );
return dp[conf][nod];
}
int main ()
{
ifstream fin ( "hamilton.in" );
ofstream fout ( "hamilton.out" );
fin >> n >> m;
int i, j, a, b, c;
for ( i = 0; i < n; i++ )
for ( j = 0; j < n; j++ )
ad[i][j] = inf;
for ( i = 0; i < m; i++ )
{
fin >> a >> b >> c;
ad[a][b] = c;
}
for ( i = 0; i < (1<<n); i++ )
for ( j = 0; j < n; j++ )
dp[i][j] = inf;
dp[1][0] = 0;
int _m = inf;
for ( i = 1; i < n; i++ )
if ( ad[i][0] < inf )
_m = min ( _m, calc ((1LL<<n) - 1, i) + ad[i][0] );
if ( _m < inf )
fout << _m;
else
fout << "Nu exista solutie";
fin.close ();
fout.close ();
return 0;
}