Pagini recente » Cod sursa (job #1529415) | Cod sursa (job #766030) | Cod sursa (job #1315825) | Cod sursa (job #1421287) | Cod sursa (job #2079870)
#include <bits/stdc++.h>
using namespace std;
int n, src;
const int N_MAX = 18 + 5;
const int inf = 0x3f3f3f3f;
int graph[N_MAX][N_MAX], dp[(1<<20)][N_MAX], m;
ifstream fin ("hamilton.in");
ofstream fout("hamilton.out");
void init() {
for ( int i = 0; i < n; ++i )
if(graph[src][i] != inf)
dp[ 1 << i ][ i ] = graph[ src ][ i ];
}
int solve( int mask, int nod ) {
if ( dp[mask][nod] != -1 )
return dp[mask][nod];
dp[mask][nod] = inf;
for ( int i = 0; i < n; ++i )
if ( i != nod && ( mask & ( 1 << i ) ) )
dp[mask][nod] = min( dp[mask][nod], solve( mask - (1 << nod), i ) + graph[i][nod] );
return dp[mask][nod];
}
int main() {
fin >> n >> m;
memset(graph, inf, sizeof(graph));
while(m--){
int a, b, c;
fin >> a >> b >> c;
graph[a][b] = c;
}
for(int i = 0; i<n; ++i)
graph[i][i] = 0;
src = 0;
memset(dp, -1, sizeof(dp));
init();
int ans = solve((1<<n)-1, src);
if(ans >= 0 and ans < inf)
fout << ans;
else
fout << "Nu exista solutie";
return 0;
}