Pagini recente » Cod sursa (job #1429318) | Cod sursa (job #304472) | Cod sursa (job #2944543) | Cod sursa (job #637897) | Cod sursa (job #1458879)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 10
#define inf 2000000000
ifstream f("portal3.in");
ofstream g("portal3.out");
int n, m, k, t;
int cost[MAX_N][MAX_N];
struct point {
int x, y;
} P[MAX_N];
int solve() {
int use[MAX_N], dist[MAX_N];
for (int i = 0; i < MAX_N; i++) {
use[i] = 0;
dist[i] = inf;
}
dist[1] = 0;
for (int pmin = 1; pmin != 8;) {
use[pmin] = 1;
for (int i = 1; i <= 8; i++)
if (dist[i] > 1LL * dist[pmin] + 1LL * cost[pmin][i])
dist[i] = dist[pmin] + cost[pmin][i];
pmin = 8;
for (int i = 1; i <= 8; i++)
if (use[i] == 0 && dist[i] < dist[pmin])
pmin = i;
}
return dist[8];
}
int main() {
for (f >> t; t; t--) {
k = 1; P[k].x = P[k].y = 0;
f >> n >> m;
for (int i = 1; i <= 3; i++) {
k++;
f >> P[k].x >> P[k].y;
for (int j = 1; j < k; j++)
cost[j][k] = cost[k][j] = abs(P[j].x - P[k].x) + abs(P[j].y - P[k].y);
k++;
f >> P[k].x >> P[k].y;
for (int j = 1; j < k; j++)
cost[j][k] = cost[k][j] = abs(P[j].x - P[k].x) + abs(P[j].y - P[k].y);
int C;
f >> C;
cost[k - 1][k] = cost[k][k - 1] = min(cost[k - 1][k], C);
}
k++; P[k].x = n; P[k].y = m;
for (int j = 1; j < k; j++)
cost[j][k] = cost[k][j] = abs(P[j].x - P[k].x) + abs(P[j].y - P[k].y);
g << solve() << "\n";
}
return 0;
}