Pagini recente » Cod sursa (job #1729911) | Cod sursa (job #1724534) | Cod sursa (job #1028577) | Cod sursa (job #1075691) | Cod sursa (job #638180)
Cod sursa(job #638180)
#include<cstdio>
#include<iostream>
#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);
cin>>t;//scanf("%d",&t);
for(;t;t--)
{
scanf("%d%d",&x[7],&y[7]);
for(j=0,i=1;i<=3;i++)
{
j++;cin>>x[j]>>y[j];//scanf("%d%d",&x[j],&y[j]);
j++;cin>>x[j]>>y[j];//scanf("%d%d",&x[j],&y[j]);
cin>>c[i];//scanf("%d",&c[i]);
}
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;
}
cout<<D[7];//printf("%d\n",D[7]);
}
return 0;
}