Pagini recente » Cod sursa (job #2179423) | Cod sursa (job #733149) | Cod sursa (job #2656377) | nimic_suspect. | Cod sursa (job #197573)
Cod sursa(job #197573)
#include <cstdio>
using namespace std;
int m,c,n,a[2][2000000];
int li,ci,lf,cf,pq,uq;
struct coditza {int i,j;} q[4000000];
void fill()
{
for(int j=0;j<c;j++)
{
if(a[0][j]>0)
a[0][j]=0;
if(a[1][j]>0)
a[1][j]=0;
}
}
void drum(int li, int ci, int lf, int cf)
{
int i,j;
pq=uq=0;
q[pq].i=li;
q[pq].j=ci;
a[li][ci]=1;
while(pq<=uq)
{
i=q[pq].i;
j=q[pq++].j;
if(i==lf && j==cf)
break;
if(j<c-1 && a[i][j+1]==0)
{
a[i][j+1]=a[i][j]+1;
q[++uq].i=i;
q[uq].j=j+1;
}
if(i==0 && a[i+1][j]==0)
{
a[i+1][j]=a[i][j]+1;
q[++uq].i=i+1;
q[uq].j=j;
}
if(j>0 && a[i][j-1]==0)
{
a[i][j-1]=a[i][j]+1;
q[++uq].i=i;
q[uq].j=j-1;
}
if(i==1 && a[i-1][j]==0)
{
a[i-1][j]=a[i][j]+1;
q[++uq].i=i-1;
q[uq].j=j;
}
}
printf("%d\n",a[lf][cf]);
}
int main()
{
int x1,x2;
freopen("gropi.in","r",stdin);
freopen("gropi.out","w",stdout);
scanf("%d%d",&c,&n);
for(int i=0;i<n;i++)
{
scanf("%d%d",&x1,&x2);
a[x1-1][x2-1]=-1;
}
scanf("%d",&m);
for(int i=0;i<m;i++)
{
scanf("%d%d%d%d",&li,&ci,&lf,&cf);
drum(li-1,ci-1,lf-1,cf-1);
fill();
}
fclose(stdin);
return 0;
}