Pagini recente » Cod sursa (job #40655) | Cod sursa (job #317174) | Cod sursa (job #269351) | Cod sursa (job #1961207) | Cod sursa (job #2489508)
#include<cstdio>
#include<vector>
using namespace std;
const int NMAX=20;
const int MAXX=262150;
const int INF=100000000;
int cost[NMAX][NMAX],c[MAXX][NMAX];
vector <int> v[NMAX];
int main(){
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
int n,m;
scanf("%d%d", &n, &m);
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cost[i][j]=INF;
for(int i=1;i<=m;i++){
int x,y;
scanf("%d%d", &x, &y);
v[y].push_back(x);
scanf("%d", &cost[x][y]);
}
for(int i=0;i<(1<<n);i++)
for(int j=0;j<n;j++)
c[i][j]=INF;
c[1][0]=0;
for(int i=0;i<(1<<n);i++)
for(int j=0;j<n;j++)
if(i & (1<<j))
for(int k=0;k<(int)v[j].size();k++)
if(i & (1<<v[j][k]))
c[i][j]=min(c[i][j], c[i^(1<<j)][v[j][k]]+cost[v[j][k]][j]);
int sol=INF;
for(int i=0;i<(int)v[0].size();i++)
sol=min(sol, c[(1<<n)-1][v[0][i]]+cost[v[0][i]][0]);
if(sol==INF)
printf("Nu exista solutie");
else
printf("%d\n", sol);
return 0;
}