Pagini recente » Cod sursa (job #1580583) | Cod sursa (job #2276788) | Cod sursa (job #2975906) | Cod sursa (job #2666041) | Cod sursa (job #2247055)
#include <cstdio>
#include <vector>
#define MAXCOST 100000001
using namespace std;
int main()
{
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out", "w", stdout);
int n, m, i, j, k, x, y;
scanf("%d%d", &n, &m);
int h[(1<<n)][n+1];
int arcs[n+1][n+1];
vector<vector<int>> rev_arcs(n+1);
for(i=0; i<n; ++i)
for(j=0; j<n; ++j)
arcs[i][j] = MAXCOST;
for(i=1; i<=m; ++i)
{
scanf("%d%d", &x, &y);
scanf("%d", &arcs[x][y]);
rev_arcs[y].push_back(x);
}
for(i=0; i<(1<<n); ++i)
for(j=0; j<n; ++j)
h[i][j] = MAXCOST;
h[1][0] = 0;
for(i=0; i<(1<<n); ++i)
for(j=0; j<n; ++j)
if (i & (1<<j))
for(k=0; k<rev_arcs[j].size(); ++k)
h[i][j] = min(h[i][j], h[i^(1<<j)][rev_arcs[j][k]] + arcs[rev_arcs[j][k]][j]);
x = MAXCOST;
for(i=0; i<rev_arcs[0].size(); ++i)
x = min(x, h[(1<<n) - 1][rev_arcs[0][i]] + arcs[rev_arcs[0][i]][0]);
if(x == MAXCOST)
printf("Nu exista solutie\n");
else
printf("%d\n", x);
fclose(stdin);
fclose(stdout);
return 0;
}