Cod sursa(job #362477)

Utilizator Cristi09Cristi Cristi09 Data 9 noiembrie 2009 20:44:06
Problema Transport Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include<stdio.h>

int a[255][255],n,val;
struct nod
{
   int x,y,val;
   nod*leg;
}*prim,*p,*q;;
void adauga(int i,int j);
int main()
{
  prim=new nod;q=new nod;
  prim->leg=NULL;
  q=prim;

  FILE*f=fopen("muzeu.in","r");
  int i,j,cont;
  char var;
  fscanf(f,"%d",&n);
  for(i=0;i<=n+1;++i)
  for(j=0;j<=n+1;++j)
   {if(i==0||j==0||i==n+1||j==n+1){a[i][j]=-2;continue;}
	fscanf(f,"%c",&var);
	if(var=='\n'){j--;continue;}
	switch(var)
	{
	  case 'P':{
				  a[i][j]=0;
				  p=new nod;
				  p->x=i;
				  p->y=j;
				  p->val=0;
				  p->leg=NULL;
				  q->leg=p;
				  q=p;
				  break;
			   }
	  case '#':{a[i][j]=-2;break;}

	  case '.':{a[i][j]=30000;break;}
	}

   }
   fclose(f);

  while(prim->leg)
  {
	  p=prim->leg;
	  i=p->x;
	  j=p->y;
	  val=p->val+1;
	  prim->leg=p->leg;
	  delete p;
	  if(prim->leg==NULL)q=prim;
	  cont=0;
	  while(cont<4)
	  {
		switch(cont)
		{
		   case 0:{adauga(i-1,j);break;}
		   case 1:{adauga(i+1,j);break;}
		   case 2:{adauga(i,j-1);break;}
		   case 3:{adauga(i,j+1);break;}
		 }
		 cont++;
	  }
  }
  FILE*g=fopen("muzeu.out","w");
  for(i=1;i<n+1;++i)
  {for(j=1;j<n+1;++j)
   if(a[i][j]==30000)fprintf(g,"%d ",-1);
   else fprintf(g,"%d ",a[i][j]);
   fprintf(g,"\n");
  }
  fclose(g);
  return 0;
}
void adauga(int i,int j)
{
   if(a[i][j]>val)
   {
	  p=new nod;
	  p->leg=NULL;
	  p->x=i;
	  p->y=j;
	  p->val=val;
	  a[i][j]=val;
	  q->leg=p;
	  q=p;
   }
}