Pagini recente » Cod sursa (job #559707) | Cod sursa (job #1141893) | Cod sursa (job #2540713) | Cod sursa (job #2522141) | Cod sursa (job #2528457)
#include <bits/stdc++.h>
#define Inf 30000001
using namespace std;
ifstream in("hamilton.in");
ofstream out("hamilton.out");
int n,m;
int dp[(1<<18)][18];
int cost[18][18];
vector <int> gft[18];
int main()
{
in>>n>>m;
for(int i,j,ct,k=1;k<=m;k++)
{
in>>i>>j>>ct;
cost[i][j]=ct;
gft[j].push_back(i);
}
for(int i=1;i<=(1<<n)-1;i++)
for(int j=0;j<=n-1;j++)
dp[i][j]=Inf;
for(int i=0;i<n;i++)
dp[(1<<i)][i]=0;
for(int i=1;i<=(1<<n)-1;i++)
for(int j=0;j<=n-1;j++)
if( i&(1<<j) )
{
int nod=j;
for(auto vec:gft[nod])
if( i&(1<<vec) )
dp[i][nod]=min(dp[i][nod],dp[i-(1<<nod)][vec]+cost[vec][nod]);
}
int minim=Inf;
for(auto vec:gft[0])
minim=min(minim,dp[(1<<n)-1][vec]+cost[vec][0]);
if(minim<Inf)
out<<minim;
else
out<<"Nu exista solutie";
return 0;
}