Pagini recente » Cod sursa (job #900547) | Cod sursa (job #1664639) | Cod sursa (job #401265) | Cod sursa (job #258648) | Cod sursa (job #637769)
Cod sursa(job #637769)
#include <cstdio>
#include <cstring>
#include <queue>
#include <vector>
using namespace std;
inline int abs(int x){if (x>0) return x;else return -x;}
int d[10],u[10],rx[10],ry[10];
struct str{int x,y;};
inline str mp(int x,int y){str aux;aux.x=x;aux.y=y;return aux;}
struct cmp_str{bool operator()(str x,str y){return x.y>y.y;};};
priority_queue <str,vector <str>,cmp_str> q;
vector <str> g[10];
int main()
{
int t,n,m,i,j,c;
vector <str>::iterator it;
str aux;
freopen("portal3.in","r",stdin);
freopen("portal3.out","w",stdout);
scanf("%d",&t);
for (;t;--t)
{
scanf("%d%d",&n,&m);
rx[2]=n;
ry[2]=m;
for (i=1;i<=3;++i)
{
scanf("%d%d%d%d%d",&rx[2*i+1],&ry[2*i+1],&rx[2*i+2],&ry[2*i+2],&c);
g[2*i+1].push_back(mp(2*i+2,c));
g[2*i+2].push_back(mp(2*i+1,c));
}
for (i=1;i<=8;++i)
for (j=1;j<=8;++j)
{
g[i].push_back(mp(j,abs(rx[i]-rx[j])+abs(ry[i]-ry[j])));
g[i].push_back(mp(j,abs(rx[i]-rx[j])+abs(ry[i]-ry[j])));
}
q.push(mp(1,0));
while (q.top().x!=2)
{
aux=q.top();
q.pop();
if (u[aux.x])
continue;
u[aux.x]=1;
for (it=g[aux.x].begin();it!=g[aux.x].end();++it)
if (!u[it->x])
q.push(mp(it->x,(it->y)+aux.y));
}
printf("%d\n",q.top().y);
while (!q.empty())
q.pop();
for (i=1;i<=8;++i)
g[i].clear();
}
return 0;
}