Pagini recente » Cod sursa (job #167769) | Cod sursa (job #1344879) | Cod sursa (job #1448046) | Cod sursa (job #2847528) | Cod sursa (job #2297752)
#include <bits/stdc++.h>
#define maxn 18
#define maxm 153
#define lll long long
#define inf INT_MAX / 2
using namespace std;
int ad[maxn+5][maxn+5];
int dp[(1LL<<maxn)+5][maxn];
int n, m;
int calc ( lll conf, int nod )
{
if ( dp[conf][nod] < inf )
return dp[conf][nod];
int i, j;
for ( i = 0; i < n; i++ )
if ( (conf & (1LL<<i)) && ad[j][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;
}
lll il;
for ( il = 0; il < (1LL<<n); il++ )
for ( i = 0; i < n; i++ )
dp[il][i] = inf;
for ( i = 0; i < n; i++ )
dp[1LL<<i][i] = 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;
}