Pagini recente » Cod sursa (job #663329) | Cod sursa (job #2212156) | Cod sursa (job #2587956) | Cod sursa (job #80044) | Cod sursa (job #503821)
Cod sursa(job #503821)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define inf 100000000
#define vmax 270000
#define nmax 25
int s[vmax][nmax], n, m, cost[nmax][nmax];
vector<int> a[nmax];
int main()
{
freopen("hamilton.in","r",stdin);
freopen("hamilton.out","w",stdout);
scanf("%d %d",&n,&m);
int i, j, x, y;
for (i=0; i<n; i++)
for (j=0; j<n; j++) cost[i][j]=inf;
for (i=1; i<=m; i++)
{
scanf("%d %d %d",&x,&y,&j);
cost[x][y]=j;
a[y].push_back(x);
}
for (i=0; i<1<<n; i++)
for (j=0; j<n; j++) s[i][j]=inf;
s[1][0]=0;
for (i=0; i<1<<n; i++)
for (j=0; j<n; j++)
if (i & (1<<j))
for (size_t k=0; k<a[j].size(); k++)
if (i & (1<<a[j][k]))
s[i][j]=min(s[i][j], s[i^(1<<j)][a[j][k]]+cost[a[j][k]][j]);
int sol=inf;
for (size_t k=0; k<a[0].size(); k++)
sol=min(sol, s[(1<<n)-1][a[0][k]]+cost[a[0][k]][0]);
if (sol==inf) printf("Nu exista solutie"); else printf("%d",sol);
}