Cod sursa(job #197581)

Utilizator sigridMaria Stanciu sigrid Data 5 iulie 2008 11:10:06
Problema Gropi Scor 0
Compilator cpp Status done
Runda Junior Challenge 2008 Marime 1.23 kb
#include<fstream.h>
#define dim 3001
#define max 32000

ifstream f("gropi.in");
ofstream g("gropi.out");

unsigned long c,n,m,rez,ok;

int mat[3][dim];



void traseu(unsigned long a, unsigned long b, unsigned long x, unsigned long y)
{
unsigned long i,j;

rez=1;
mat[a][b]=1;
ok=1;

//initializare
for(i=1;i<=2;i++)
 for(j=1;j<=c;j++)
  if( (i!=a) || (j!=b) )
   if(mat[i][j]!=-1)mat[i][j]=max;

while(ok)
{
for(i=1;i<=2 && ok;i++)
 for(j=1;j<=c;j++)
  if(mat[i][j]==rez)
   {if( (mat[i-1][j]>rez+1) && (mat[i-1][j]!=-1) ) mat[i-1][j]=rez+1;
    if( ((i-1)==x) && (j==y) ) {ok=0;break;}

    if( (mat[i+1][j]>rez+1) && (mat[i+1][j]!=-1) ) mat[i+1][j]=rez+1;
    if( ((i+1)==x) && (j==y) ) {ok=0;break;}

    if( (mat[i][j-1]>rez+1) && (mat[i][j-1]!=-1) ) mat[i][j-1]=rez+1;
    if( (i==x) && ((j-1)==y) ) {ok=0;break;}

    if( (mat[i][j+1]>rez+1) && (mat[i][j+1]!=-1) ) mat[i][j+1]=rez+1;
    if( (i==x) && ((j+1)==y) ) {ok=0;break;}
   }
rez++;
}


}



int main()
{
unsigned long i,j,k,x,y,a,b;

f>>c>>n;
for(i=1;i<=n;i++)
 {f>>x>>y;
  mat[x][y]=-1;
 }

f>>m;
for(i=1;i<=m;i++)
 {
  f>>a>>b>>x>>y;

  traseu(a,b,x,y);

  g<<rez<<'\n';
 }

f.close();

g.close();

return 0;
}