Pagini recente » Cod sursa (job #2161787) | Cod sursa (job #888016) | Cod sursa (job #506086) | Cod sursa (job #2799597) | Cod sursa (job #1518157)
//#include<iostream>
//#include<fstream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
const int inf=0x3f3f3f3f;
const int NMAX=19 ;
//ifstream si("hamilton.in");
//ofstream so("hamilton.out");
vector<int> v[NMAX];
int cost[NMAX][NMAX];
int dp[(1<<(NMAX-1))+1][NMAX+2];
int sol=inf;
int n;
void rez()
{
int i,j,k,m;
int N=(1<<n);
dp[1][0]=0;
for(i=1;i<N;++i)
{
for(j=0;j<n;++j)
{
if(i&(1<<j))
{
m=v[j].size();
for(k=0;k<m;++k)
{
if(i&(1<<v[j][k]))
{
dp[i][j]=min(dp[i][j],dp[i^(1<<j)][v[j][k]]+cost[v[j][k]][j]);
}
}
}
}
}
m=v[0].size();
for(i=0;i<m;++i)
sol=min(sol,dp[N-1][v[0][i]]+cost[v[0][ i]][0]);
}
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
int m;
scanf("%i %i",&n,&m);
//si>>n>>m;
int i,n1,n2;
memset(cost,inf,sizeof(cost));
memset(dp,inf,sizeof(dp));
for(i=0;i<m;++i)
{
scanf("%i %i",&n1,&n2);
v[n2].push_back(n1);
scanf("%i",&cost[n1][n2]);
}
rez();
if(sol!=inf)
printf("%i",sol);
else
printf("Nu exista solutie");
printf("\n");
}