Pagini recente » Cod sursa (job #797889) | Cod sursa (job #1108154) | Cod sursa (job #1094461) | Cod sursa (job #1052832) | Cod sursa (job #638135)
Cod sursa(job #638135)
#include<cstdio>
#include<deque>
#include<algorithm>
using namespace std;
int t,x[10],y[10],q[10],i,j,c[5],T[10][10],D[10],oo=2000000010;
deque<int> Q;
int main()
{
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
scanf("%d",&t);
for(;t;t--)
{
scanf("%d%d",&x[7],&y[7]);
for(j=0,i=1;i<=3;i++)
{
j++;scanf("%d%d",&x[j],&y[j]);
j++;scanf("%d%d",&x[j],&y[j]);
scanf("%d",&c[j/2]);
}
for(i=0;i<8;i++)
for(j=0;j<8;j++)
T[i][j]=abs(x[i]-x[j])+abs(y[i]-y[j]);
for(j=1;j<=3;j++)
if(c[j]<T[2*j-1][2*j])
T[2*j-1][2*j]=T[2*j][2*j-1]=c[j];
for(j=1;j<8;j++)
D[j]=oo;
Q.resize(0);
Q.push_back(0);q[0]=1;
for(;Q.size();)
{
i=Q.front();
for(j=0;j<8;j++)
if(D[i]+T[i][j]<D[j])
{
D[j]=D[i]+T[i][j];
if(!q[j])
{
q[j]=1;
Q.push_back(j);
}
}
Q.pop_front();
q[i]=0;
}
printf("%d\n",D[7]);
}
return 0;
}