Cod sursa(job #254562)

Utilizator perticas_catalinperticas catalin perticas_catalin Data 7 februarie 2009 12:59:49
Problema Kdrum Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2009, clasele 9-10, ziua 2 Marime 0.94 kb
#include<stdio.h>
FILE*fin=fopen("kdrum.in","r");
FILE*fout=fopen("kdrum.out","w");
int n,m,k,a[52][52],u[52][52],cx[52*52],cy[52*52],d[52*52];
int main()
{
  int i,j,st=0,dr=0,xf,yf,xi,yi;
  int l,c,nl,nc;
  int pl[4]={-1,0,1,0};
  int pc[4]={0,1,0,-1};
  fscanf(fin,"%d%d%d",&n,&m,&k);
  fscanf(fin,"%d%d%d%d",&xi,&yi,&xf,&yf);
  for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
      fscanf(fin,"%d",&a[i][j]);
      u[i][j]=0;
      if(!a[i][j]) u[i][j]=1;
    }
  u[xi][yi]=1;
  cx[st]=xi;cy[st]=yi;d[st]=1;
  while(st<=dr)
  {
    l=cx[st];c=cy[st];
    for(i=0;i<4;i++)
    {
      nl=l+pl[i];
      nc=c+pc[i];
      if(nl>0&&nl<=n&&nc>0&&nc<=m&&!u[nl][nc])
      {
	dr++;
	cx[dr]=nl;
	cy[dr]=nc;
	d[dr]=d[st]+1;
	u[nl][nc]=1;
	if(nl==xf&&nc==yf) break;
      }
    }
    st++;
  }
  if(cx[dr]==xf&&cy[dr]==yf) fprintf(fout,"%d",d[dr]);
  else fprintf(fout,"-1");
  fclose(fin);
  fclose(fout);
  return 0;
}