Cod sursa(job #362200)

Utilizator Cristi09Cristi Cristi09 Data 8 noiembrie 2009 14:36:00
Problema Rj Scor 0
Compilator cpp Status done
Runda CNRV #4 Marime 1.8 kb
#include<fstream.h>
#include<string.h>
struct nod
{
	int x,y,val;
	nod*leg;
}*prim,*p,*q;
int a[105][105],n,m,val;
void adauga(int i,int j);
int main()
{
	prim=new nod;q=new nod;
	prim->leg=NULL;
	q=prim;
	ifstream f("rj.in");
	f>>n>>m;
	int i,j,xr,yr,xj,yj;
	char var,v[105];

	for(i=0;i<=n+1;++i)
	for(j=0;j<=m+1;++j)
	if(i==0||j==0||i==n+1||j==n+1)a[i][j]=-2;
	f.getline(v,100);
	for(i=1;i<n+1;++i)
	{
		f.getline(v,105);
		if(strlen(v)==m-1)v[strlen(v)]=' ';

		for(j=1;j<m+1;++j)
		{
		   switch(v[j-1])
		   {
		   case 'R':{
					  a[i][j]=0;
					  p=new nod;
					  p->leg=NULL;prim->leg=p;
					  p->x=xr=i;p->y=yr=j;p->val=0;
					  break;
					 }
		   case 'J':{
					  a[i][j]=30000;
					  xj=i;yj=j;
					  break;
					}
		   case 'X':{
					  a[i][j]=-2;
					  break;
					}
		   case ' ':{
					  a[i][j]=30000;
					  break;
					 }
		   }

		}

	}
	f.close();
	q=prim;int cont;
	while(prim->leg)
	{
	   p=prim->leg;
	   prim->leg=p->leg;
	   val=p->val+1;
	   i=p->x;j=p->y;
	   delete p;
	   if(prim->leg==NULL)q=prim;
	   cont=0;
	   while(cont<8)
	   {
		 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;}
			case 4:{adauga(i-1,j-1);break;}
			case 5:{adauga(i+1,j-1);break;}
			case 6:{adauga(i-1,j+1);break;}
			case 7:{adauga(i+1,j+1);break;}
		 }
		 cont++;
	   }
	}
	val=a[xj][yj]/2;

	for(i=1;i<n+1;i++)
	for(j=1;j<m+1;j++)
	  if(a[i][j]==val){xr=i;yr=j;j=m;i=n;}

	ofstream g("rj.out");
	g<<val+1<<" "<<xr<<" "<<yr;
	g.close();
	return 0;
}
void adauga(int i,int j)
{
   if(a[i][j]>val)
   {
	   p=new nod;
	   p->leg=NULL;
	   q->leg=p;
	   a[i][j]=val;
	   p->val=val;
	   p->x=i;
	   p->y=j;
	   q=p;
   }
}