Pagini recente » Cod sursa (job #2103360) | Cod sursa (job #422238) | Cod sursa (job #69946) | Cod sursa (job #294818) | Cod sursa (job #755698)
Cod sursa(job #755698)
#include<cstdio>
#include<vector>
using namespace std;
const int INF = 1000000000;
int N,M;
int sol[262500][20],cost[20][20];
vector<int> nr[20];
int main(){
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
int i,j,x,y,c;
scanf("%d%d",&N,&M);
for(i=0;i<M;++i){
scanf("%d%d%d",&x,&y,&c);
nr[y].push_back(x);
cost[x][y]=c;
}
for(i=0;i<(1<<N);++i){
for(j=0;j<N;++j)
sol[i][j]=INF;
}
sol[1][0]=0;
for(i=0;i<(1<<N);++i){
for(j=0;j<N;++j){
if(i & (1<<j) ){
for(size_t k=0;k<nr[j].size();++k){
if(i & (1<<nr[j][k]) )
sol[i][j]=min(sol[i][j], sol[i^(1<<j)][nr[j][k]] + cost[nr[j][k]][j]);
}
}
}
}
c=INF;
for(size_t k =0; k<nr[0].size();++k){
if(c>sol[(1<<N)-1][nr[0][k]] + cost[nr[0][k]][0])
c=sol[(1<<N)-1][nr[0][k]] + cost[nr[0][k]][0];
}
if(c==INF)
printf("Nu exista solutie\n");
else
printf("%d\n",c);
fclose(stdin);
fclose(stdout);
return 0;
}