Pagini recente » Borderou de evaluare (job #2201006) | Cod sursa (job #327173) | Cod sursa (job #748305) | Cod sursa (job #2939685) | Cod sursa (job #197581)
Cod sursa(job #197581)
#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;
}