Pagini recente » Cod sursa (job #302869) | Cod sursa (job #212428) | Cod sursa (job #1553400) | Cod sursa (job #31945) | Cod sursa (job #637074)
Cod sursa(job #637074)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
const int oo = 0x4f4f4f;
int D[10], V[10], C[10][10];
int Dijkstra()
{
memset(D, oo, sizeof(D));
memset(V, 0, sizeof(V));
D[0] = 0;
int i, j, mini, poz;
for(i = 0; i <= 7; i++)
{
mini = oo, poz = 0;
for(j = 0; j <= 7; j++)
if(D[j] < mini && !V[j])
mini = j, poz = j;
for(j = 0; j <= 7; j++)
if(D[j] > D[poz] + C[poz][j])
D[j] = D[poz] + C[poz][j];
V[poz] = 1;
}
return D[7];
}
inline int abs(int x)
{
if(x < 0)
return -x;
return x;
}
int P[10][10];
int main()
{
ifstream in ("portal3.in");
ofstream out("portal3.out");
int T, N, M, X1, X2, Y1, Y2, C1, i, j;
in >> T;
memset(C, oo, sizeof(C));
while(T--)
{
in >> N >> M;
for(i = 0; i < 3; i++)
{
in >> X1 >> Y1 >> X2 >> Y2 >> C1;
C[1 + 2 * i][0] = C[0][1 + 2 * i] = X1 + Y1;
C[2 + 2 * i][0] = C[0][2 + 2 * i] = X2 + Y2;
C[2 * i + 2][2 * i + 1] = C[2 * i + 1][2* i + 2] = min(abs(X2 - X1) + abs(Y2 - Y1), C1);
C[7][2 * i + 1] = C[1 + 2 * i][7] = N - X1 + M - Y1;
C[7][2 * i + 2] = C[2 * i + 2][7] = N + M - X2 - Y2;
P[2 * i + 1][1] = X1;
P[2 * i + 1][2] = Y1;
P[2 * i + 2][1] = X2;
P[2 * i + 2][2] = Y2;
for(j = 2 * i; j > 0; j--)
{
C[j][2 * i + 1] = C[2 * i + 1][j] = abs(P[j][1] - X1) + abs(P[j][2] - Y1);
C[j][2 * i + 2] = C[2 * i + 2][j] = abs(P[j][1] - X2) + abs(P[j][2] - Y2);
}
}
out << Dijkstra() << '\n';
}
return 0;
}