Pagini recente » Cod sursa (job #1266750) | Cod sursa (job #2896228) | Cod sursa (job #1095601) | Cod sursa (job #2253694) | Cod sursa (job #638132)
Cod sursa(job #638132)
#include <stdio.h>
#include <stdlib.h>
int cost[7][7];
struct portal {
int x1, y1;
int x2, y2;
int c;
} v[7];
inline int min(int a, int b)
{
return (a < b) ? a : b;
}
int main()
{
freopen("portal3.in", "r", stdin);
freopen("portal3.out", "w", stdout);
int T, i, j, k, N, M, cAux;
scanf("%d", &T);
for ( ; T; --T) {
scanf("%d %d", &N, &M);
for (i = 1; i <= 3; ++i) {
scanf("%d %d %d %d %d", &v[2*i-1].x1, &v[2*i-1].y1, &v[2*i-1].x2, &v[2*i-1].y2, &v[2*i-1].c);
v[2*i].x1 = v[2*i-1].x2, v[2*i].y1 = v[2*i-1].y2, v[2*i].x2 = v[2*i-1].x1, v[2*i].y2 = v[2*i-1].y1, v[2*i].c = v[2*i-1].c;
}
for (i = 1; i <= 6; ++i)
cost[i][1] = v[i].x1 + v[i].y1 + v[i].c;
for (i = 1; i <= 6; ++i)
for (j = 2; j <= 6; ++j) {
cAux = 1000000001;
for (k = 1; k <= 6; ++k) {
if (k == i)
continue;
if (i % 2 == 1 && k == i + 1)
continue;
if (i % 2 == 0 && k == i - 1)
continue;
cAux = min(cAux, cost[k][j - 1] + abs(v[i].x1 - v[k].x2) + abs(v[i].y1 - v[k].y2) + v[i].c);
}
cost[i][j] = cAux;
}
int costMin = N + M;
for (i = 1; i <= 6; ++i)
for (j = 1; j <= 6; ++j) {
if (cost[i][j] + N - v[i].x2 + M - v[i].y2 < costMin)
costMin = cost[i][j] + N - v[i].x2 + M - v[i].y2;
}
printf("%d\n", costMin + 1);
}
return 0;
}