Pagini recente » Cod sursa (job #2522420) | Cod sursa (job #3222264) | Cod sursa (job #1641314) | Cod sursa (job #2287385) | Cod sursa (job #636137)
Cod sursa(job #636137)
#include <stdio.h>
#include <string.h>
struct pos
{
int x, y;
};
struct portal
{
pos x0, x1;
int d;
} x[5];
int min, st[5], N, M, f[4];
inline int ab (int x)
{
if (x > 0)
return x;
return x * (-1);
}
inline long long dist (int x0, int y0, int x1, int y1)
{
return ab (x0 - x1) + ab (y0 - y1);
}
void solve (int k)
{
int i;
long long time = 0;
portal now[10];
memset (now, 0, sizeof (now));
now[k + 1].x0.x = N; now[k + 1].x0.y = M;
for (i = 1; i <= k; i ++)
now[i] = x[st[i]];
for (i = 0; i <= k; i ++)
time = (long long)time + dist (now[i].x1.x, now[i].x1.y, now[i + 1].x0.x, now[i + 1].x0.y) + now[i].d;
if (time < min)
min = time;
}
void Back (int k)
{
int i;
for (i = 1; i <= 3; i ++)
if (!f[i])
{
st[k] = i;
f[i] = 1;
solve (k);
Back (k + 1);
f[i] = 0;
}
}
int main ()
{
int T, i;
freopen ("portal3.in", "r", stdin);
freopen ("portal3.out", "w", stdout);
scanf ("%d", &T);
while (T --)
{
memset (st, 0, sizeof (st));
memset (f, 0, sizeof (f));
scanf ("%d%d", &N, &M);
for (i = 1; i <= 3; i ++)
scanf ("%d%d%d%d%d", &x[i].x0.x, &x[i].x0.y, &x[i].x1.x, &x[i].x1.y, &x[i].d);
min = N + M;
Back (1);
printf ("%d\n", min);
}
return 0;
}