Cod sursa(job #254739)

Utilizator DjSefuWrong name DjSefu Data 7 februarie 2009 13:56:42
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 2.07 kb
#include<stdio.h>
FILE *f=fopen("kdrum.in","r"),
     *g=fopen("kdrum.out","w");
struct fs
{ int v;
  int p;
  int x;
  int y;
} coada[2600];
int a[51][51],i,j,n,pr[350],k,prf[350],ok,p,pra[350],x,x1,x2,y1,y2,dx[4],dy[4],trec[51][51],pc,qc,m;
//void dfs(int k)
//{ for(int i=0;i<4;++i) if(a[i][j]==
//}
void bfs()
{ if(coada[pc].x==x2&&coada[pc].y==y2&&!ok) fprintf(g,"%d\n",coada[pc].p+1),ok=1;
  trec[coada[pc].x][coada[pc].y]=1;
  if(pc<=qc){ 
              for(int i=0;i<4;++i) if(a[coada[pc].x+dx[i]][coada[pc].y+dy[i]]&&trec[coada[pc].x+dx[i]][coada[pc].y+dy[i]]==0) { ++qc;coada[qc].x=coada[pc].x+dx[i];
                                                                                                                                coada[qc].y=coada[pc].y+dy[i];
                                                                                                                                coada[qc].p=coada[pc].p+1;
                                                                                                                                }
              ++pc;
              bfs();
              }  
}                                                                                                               
int main()
{ fscanf(f,"%d %d %d",&n,&m,&k);
  fscanf(f,"%d %d %d %d",&x1,&y1,&x2,&y2);
  if(x2>x1) { dx[0]=1,dy[0]=0;
              if(y2>y1) dx[1]=0,dy[1]=1,dx[2]=0,dy[2]=-1,dx[3]=-1,dy[3]=0;
              else dx[1]=0,dy[1]=-1,dx[2]=0,dy[2]=1,dx[3]=-1,dy[3]=0;
              }  
  else { dx[0]=-1,dy[0]=0;
         if(y2>y1) dx[1]=0,dy[1]=1,dx[2]=0,dy[2]=-1,dx[3]=1,dy[3]=0;
         else dx[1]=0,dy[1]=-1,dx[2]=0,dy[2]=1,dx[3]=1,dy[3]=0;
         }  
  for(i=1;i<=n;++i) for(j=1;j<=m;++j) { fscanf(f,"%d",&a[i][j]);
                      if(a[i][j]){ a[i][j]%=k;           
                                   if(a[i][j]==0) a[i][j]=k;
                                   }                        
                      
                      }
  coada[1].x=x1;
  coada[1].y=y1;
  pc=1;
  qc=1;
  bfs();
  fclose(f);
  fclose(g);
  return 0;
}