Pagini recente » Cod sursa (job #1367598) | Cod sursa (job #2034028) | Cod sursa (job #1876258) | Cod sursa (job #415354) | Cod sursa (job #2076240)
///Solutia 100p
#include <bits/stdc++.h>
#define INF 200000
using namespace std;
int Ct[21][21];
int C[1<<21][21];
int N, M, SOL;
int main()
{
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out","w", stdout);
/// citirea datelor
int x, y, c;
scanf("%d %d", &N, &M);
for (int i=0; i<M; ++i) {
scanf("%d %d %d", &x, &y, &c);
Ct[x][y] = c;
}
memset(C, INF, sizeof C);
C[0][1] = 0;
for(int bit=1; bit < (1 << N); ++bit)
for(int i=0; i<N; ++i)
if(bit & (1<<i)){
for(int j=0; j<N; ++j)
if(Ct[i][j] > 0 && !(bit & (1<<j)))
C[j][bit|(1<<j)] = min(C[j][bit|(1<<j)], C[i][bit] + Ct[i][j]);
}
///determinam solutia
SOL = INF;
for(int i=0; i<N; ++i)
if(Ct[i][0])
SOL = min(SOL, C[i][(1 << N)-1] + Ct[i][0]);
if (SOL >= INF) printf("Nu exista solutie\n");
else printf("%d\n", SOL);
return 0;
}