Pagini recente » Partitura | Monitorul de evaluare | Infoarena Monthly 2014 - Runda 4 | Statistici Carapencea Sabina-Elena (sabinochka) | Cod sursa (job #381569)
Cod sursa(job #381569)
#include <stdio.h>
#include <vector>
#include <algorithm>
#include <string.h>
using namespace std;
#define NMAX 18
#define SMAX 1 << 18
#define INF 0x3f3f3f3f
int N, M;
int cst[NMAX][NMAX];
int din[SMAX][NMAX];
int main() {
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out", "w", stdout);
scanf("%d %d ", &N, &M);
int i, j, k;
memset(cst, INF, sizeof(cst));
for (i = 1; i <= M; i++) {
int x, y, c;
scanf("%d %d %d ", &x, &y, &c);
cst[x][y] = c;
}
memset(din, INF, sizeof(din));
din[1][0] = 0;
for (i = 1; i < (1 << N); i++) {
for (j = 0; j < N; j++) {
for (k = 0; k < N; k++) {
int cost = cst[j][k];
if ((1 << k) & i) {
continue;
}
din[i + (1 << k)][k] = min(din[i + (1 << k)][k], din[i][j] + cost);
}
}
}
int sol = INF;
for (i = 0; i < N; i++) {
sol = min(sol, din[(1 << N) - 1][i] + cst[i][0]);
}
if (sol < INF) {
printf("%d ", sol);
} else {
printf("Nu exista solutie\n");
}
return 0;
}