Pagini recente » Cod sursa (job #1800569) | Cod sursa (job #1837389) | Cod sursa (job #928464) | Cod sursa (job #1338740) | Cod sursa (job #1360189)
#include <cstdio>
#include <vector>
#include <cstring>
#define NMAX 20
#define INF 1<<30
#define P 1<<20
using namespace std;
int n,m,x,y;
long long sol=INF;
int cost[NMAX][NMAX],best[P][NMAX];
vector <int>v[NMAX];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d",&n,&m);
for (int i=0;i<(1<<n);i++)
for (int j=0;j<n;j++)
best[i][j]=INF;
for (int i=1;i<=m;i++)
{
scanf("%d %d",&x,&y);
v[y].push_back(x);
scanf("%d",&cost[x][y]);
}
best[1][0]=0;
for (int i=1;i<(1<<n);i++)
for (int j=0;j<n;j++)
if (i&(1<<j))
for (vector <int>::iterator it=v[j].begin();it!=v[j].end();it++)
if (i&(1<<(*it)) && best[i][j]>best[i^(1<<j)][*it]+cost[*it][j])
best[i][j]=best[i^(1<<j)][*it]+cost[*it][j];
for (vector <int>::iterator it=v[0].begin();it!=v[0].end();it++)
if (sol>best[(1<<n)-1][*it]+cost[*it][0])
sol=best[(1<<n)-1][*it]+cost[*it][0];
if (sol<INF)
printf("%lld",sol);
else
printf("Nu exista solutie");
}