Cod sursa(job #283166)

Utilizator stefynr8Space Monkey stefynr8 Data 18 martie 2009 20:16:34
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.69 kb
#include<stdio.h>

int n,m,a[15][15],b[15][15],lp,cp,lm,cm,k,i,j,l1,c1,l2,c2,pow;
int p,u,c[100][100],la,ca,lv,cv;

char dx[4]={-1,0,1,0};
char dy[4]={0,-1,0,1};

int main()
{
 freopen("paianjen.in","r",stdin);
 freopen("paianjen.out","w",stdout);


 scanf("%d %d %d %d %d %d %d",&m,&n,&lp,&cp,&lm,&cm,&k);

 for(i=1;i<=k;i++)
   {
   scanf("%d %d %d %d",&l1,&c1,&l2,&c2);

   if(l1==l2)
	if(c1<c2)
	      {
	      for(j=c1+1;j<c2;j++)
		   a[l1][j]=a[l1][j]|1010;

	      a[l1][c1]=a[l1][c1]|10;
	      a[l1][c2]=a[l1][c2]|1000;
	      }
	    else
	     {
	      for(j=c2+1;j<c1;j++)
		   a[l1][j]=a[l1][j]|1010;
	      a[l1][c2]=a[l1][c2]|10;
	      a[l1][c1]=a[l1][c1]|1000;
	      }

   if(c1==c2)
	if(l1<l2)
	     {
	      for(j=l1+1;j<l2;j++)
		   a[j][c1]=a[j][c1]|101;

	      a[l1][c1]=a[l1][c1]|1;
	      a[l2][c1]=a[l2][c1]|100;
	      }

	    else
	     {
	      for(j=l2+1;j<l1;j++)
		  a[j][c1]=a[j][c1]|101;

	      a[l2][c1]=a[l2][c1]|1;
	      a[l1][c1]=a[l1][c1]|100;
	      }

   }


  for (i=0;i<=n+1;i++)
	{
	 a[0][i]=-1;
	 a[n+1][i]=-1;

	}

  for (i=0;i<=m+1;i++)
	{

	 a[i][0]=-1;
	 a[i][n+1]=-1;
	}

//LEE
  p=1; u=1;
  c[1][0]=lp;
  c[1][1]=cp;
  a[lp][cp]=1;
  while (p<=u)
	{
	 la=c[p][0];
	 ca=c[p][1];
	 for (i=0;i<4;i++)
		{
		 lv=la+dx[i];
		 cv=ca+dy[i];

		 if(i==0) pow=1000;
		 if(i==1) pow=100;
		 if(i==2) pow=10;
		 if(i==3) pow=1;

		 if(a[lv][cv]==0 && ((a[la][ca]/pow)%10==0) ){
				  u++;
				  c[u][0]=lv;
				  c[u][1]=cv;
				  b[lv][cv]=b[la][ca]+1;
				  if (lv==lm && cv==cm){
							printf("%d",b[lv][cv]);
							break;
							}
				  }

		}
	 p++;
	 }

return 0;
}