Pagini recente » Cod sursa (job #215008) | Cod sursa (job #2041335) | Cod sursa (job #259015) | Cod sursa (job #617237) | Cod sursa (job #925859)
Cod sursa(job #925859)
#include<stdio.h>
#include<vector>
using namespace std;
#define maxn 20
#define maxx 262150
#define inf 100000000
#define min(a,b) ((a)<(b) ? (a):(b))
int n,m,sol;
int cost[maxn][maxn],C[maxx][maxn];
vector<int> v[maxn];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
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(size_t k=0;k<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]);
sol=inf;
for(size_t i=0;i< 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",sol);
}