Pagini recente » Cod sursa (job #2066668) | Cod sursa (job #1728579) | Cod sursa (job #3229974) | Cod sursa (job #1300565) | Cod sursa (job #635734)
Cod sursa(job #635734)
#include <fstream>
#define Infinity 1000000000000LL
using namespace std;
ifstream fin ("portal3.in");
ofstream fout ("portal3.out");
long long C[10][10], X[10], Y[10], D[10];
inline long long Abs (long long x)
{
if (x<0)
{
return -x;
}
return x;
}
inline long long Dist (int i, int j)
{
return Abs (X[i]-X[j])+Abs (Y[i]-Y[j]);
}
inline long long Min (long long a, long long b)
{
if (a<b)
{
return a;
}
return b;
}
void Read ()
{
int N, M;
fin >> N >> M;
X[1]=Y[1]=0;
X[8]=N;
Y[8]=M;
for (int i=2; i<=7; i+=2)
{
for (int j=0; j<=1; ++j)
{
fin >> X[i+j] >> Y[i+j];
}
long long c;
fin >> c;
C[i][i+1]=c;
C[i+1][i]=c;
}
for (int i=1; i<=8; ++i)
{
for (int j=1; j<=8; ++j)
{
if (i==j)
{
continue;
}
C[i][j]=Min (C[i][j], Dist (i, j));
}
}
}
inline void Print ()
{
fout << D[8] << "\n";
}
void BellmanFord ()
{
for (int i=1; i<=8; ++i)
{
for (int j=1; j<=8; ++j)
{
for (int k=1; k<=8; ++k)
{
if (D[j]+C[j][k]<D[k])
{
D[k]=D[j]+C[j][k];
}
}
}
}
}
void Initialize ()
{
for (int i=0; i<=8; ++i)
{
D[i]=Infinity;
for (int j=0; j<=8; ++j)
{
C[i][j]=Infinity;
}
}
D[1]=0;
}
int main()
{
int T;
fin >> T;
for (; T>0; --T)
{
Initialize ();
Read ();
BellmanFord ();
Print ();
}
return 0;
}