Pagini recente » Cod sursa (job #945551) | Cod sursa (job #1405339) | Cod sursa (job #2382897) | Cod sursa (job #1120505) | Cod sursa (job #526918)
Cod sursa(job #526918)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
#define file_in "hamilton.in"
#define file_out "hamilton.out"
#define nmax 20
int N,M;
int a,b,c;
int C[nmax][nmax];
int D[1<<nmax][nmax];
vector<int> G[nmax];
int ans;
int i,j,k;
int main(){
freopen(file_in,"r",stdin);
freopen(file_out,"w",stdout);
scanf("%d %d", &N, &M);
for (i=1;i<=M;++i){
scanf("%d %d %d", &a, &b, &c);
G[b].push_back(a);
C[a][b]=c;
}
for (i=0;i<(1<<N);++i)
for (j=0;j<N;++j)
D[i][j]=0x3f3f3f3f;
D[1][0]=0;
for (i=0;i<(1<<N);++i)
for (j=0;j<N;++j)
if (i&(1<<j))
for (k=0;k<G[j].size();++k)
if (i&(1<<G[j][k]))
D[i][j]=min(D[i][j],D[i^(1<<j)][G[j][k]]+C[G[j][k]][j]);
ans=0x3f3f3f3f;
for (i=0;i<G[0].size();++i)
ans=min(ans,D[(1<<N)-1][G[0][i]]+C[G[0][i]][i]);
if (ans==0x3f3f3f3f)
printf("Nu exista solutie\n");
else
printf("%d\n", ans);
return 0;
}