Pagini recente » Cod sursa (job #648712) | Cod sursa (job #1587271) | Cod sursa (job #2703925) | Cod sursa (job #1840844) | Cod sursa (job #815513)
Cod sursa(job #815513)
#include <cstdio>
#include <algorithm>
using namespace std;
inline int next_int() {
int d;
scanf("%d", &d);
return d;
}
const int V = 18;
const int E = V * V;
const int INF = 1e9;
int n, m;
int cost[V][V];
bool seen[V][1 << V];
int dp[V][1 << V];
int f(int u, int mask) {
if (mask == (1 << n) - 1) {
return cost[u][0];
}
if (seen[u][mask]) {
return dp[u][mask];
}
seen[u][mask] = true;
dp[u][mask] = INF;
for (int v = 0; v < n; v++) {
if ((mask & (1 << v)) == 0) {
dp[u][mask] = min(dp[u][mask], cost[u][v] + f(v, mask | (1 << v)));
}
}
return dp[u][mask];
}
int main() {
freopen("hamilton.in", "r", stdin);
freopen("hamilton.out", "w", stdout);
n = next_int();
m = next_int();
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
cost[i][j] = INF;
}
}
for (int i = 0; i < m; i++) {
int u = next_int();
int v = next_int();
int w = next_int();
cost[u][v] = w;
}
if (f(0, 1) < INF) {
printf("%d", f(0, 1));
} else {
printf("Nu exista solutie");
}
return 0;
}