Pagini recente » Cod sursa (job #408238) | Cod sursa (job #1501820) | Cod sursa (job #15770) | Cod sursa (job #184431) | Cod sursa (job #636836)
Cod sursa(job #636836)
using namespace std;
#include<iostream>
#include<fstream>
#include<vector>
#include<queue>
#define pb push_back
#define oo 3000000000
long long N,M;
long long a[10][10];
struct ed{
long long y,lg;
};
vector<ed> G[10];
queue<long long> q;
long long d[10];
int isinq[10];
ofstream fout("portal3.out");
long long abs(long long x)
{
if(x>0)
return x;
return -x;
}
void solve()
{
long long n=8;
int i;
for(i=1;i<=n;i++)
{
d[i]=3000000000;
isinq[i]=0;
}
d[1]=0;
q.push(1);
isinq[1]=1;
long long u;
vector<ed>::iterator it;
while(!q.empty())
{
u=q.front();
//cout<<u<<" ";
q.pop();
isinq[u]=0;
for(it=G[u].begin();it<G[u].end();it++)
{
if(d[it->y]>it->lg+d[u])
{
d[it->y]=it->lg+d[u];
if(!isinq[it->y])
{
q.push(it->y);
isinq[it->y]=1;
}
}
}
}
//for(i=1;i<=n;i++)
// cout<<d[i]<<" :";
fout<<d[n]<<"\n";
}
void cit()
{
ifstream fin("portal3.in");
int T,i,j;
fin>>T;
while(T--)
{
fin>>N>>M;
for(i=1;i<=3;i++)
for(j=1;j<=5;j++)
{
fin>>a[i][j];
}
for(i=1;i<=8;i++)
{
G[i].clear();
}
G[1].pb((ed){8,N+M});
for(i=1;i<=3;i++)
{
G[1].pb((ed){i+1,a[i][1]+a[i][2]});
G[4+i].pb((ed){8,N-a[i][3]+M-a[i][4]});
G[i+1].pb((ed){8,N-a[i][1]+M-a[i][2]});
G[1].pb((ed){4+i,a[i][3]+a[i][4]});
G[i+1].pb((ed){4+i,a[i][5]});
G[4+i].pb((ed){i+1,a[i][5]});
}
for(i=1;i<=3;i++)
{
for(j=1;j<=3;j++)
{
if(i<j)
{
G[i+1].pb((ed){j+1,abs(a[i][1]-a[j][1])+abs(a[i][2]-a[j][2])});
G[4+i].pb((ed){j+1,abs(a[i][3]-a[j][1])+abs(a[i][4]-a[j][2])});
G[j+1].pb((ed){i+1,abs(a[i][1]-a[j][1])+abs(a[i][2]-a[j][2])});
G[4+j].pb((ed){i+1,abs(a[i][1]-a[j][3])+abs(a[i][2]-a[j][4])});
G[i+1].pb((ed){4+j,abs(a[i][1]-a[j][3])+abs(a[i][2]-a[j][4])});
G[4+i].pb((ed){4+j,abs(a[i][3]-a[j][3])+abs(a[i][4]-a[j][4])});
G[j+1].pb((ed){4+i,abs(a[i][3]-a[j][1])+abs(a[i][4]-a[j][2])});
G[4+j].pb((ed){4+i,abs(a[i][3]-a[j][3])+abs(a[i][4]-a[j][4])});
}
}
}
solve();
}
/*cout<<"\n\n"<<N<<"\n\n";
vector<ed>::iterator it;
for(i=1;i<=8;i++)
{
cout<<i<<" : ";
for(it=G[i].begin();it<G[i].end();it++)
{
cout<<it->y<<" := "<<it->lg<<" ; ";
}
cout<<"\n";
}*/
fin.close();
}
int main()
{
cit();
fout.close();
return 0;
}