Cod sursa(job #371517)

Utilizator mihai_voiVoicescu Mihai mihai_voi Data 5 decembrie 2009 17:05:13
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include<fstream.h>
#include<stdio.h>
char a[101][101];
int vizr[101][101],vizj[101][101],c[2][10001],min=101*101,b[2],i,j,p,u,dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1},n,m;
int main()
{ int x1,y1,x2,y2;
char x;
	ifstream f("rj.in");
	ofstream g("rj.out");
	f>>n>>m;
	for(i=1;i<=n;i++)
	{ f.get();
	 for(j=1;j<=m;j++)
	 { x=f.get();
	   if (x!='X')
		 {  a[i][j]=1;
	      if(x=='R')
		  { x1=i;
			y1=j;
		   }
		  if(x=='J')
		  { x2=i;
		    y2=j;
		  }
		 } 
	else
     a[i][j]=0;
	 }	
	}
	 
	c[0][1]=x1;
	c[1][1]=y1;
	vizr[x1][y1]=1;
	p=u=1;
	while(p!=u+1)
	{
		for(i=0;i<8;i++)
				if(vizr[c[0][p]+dx[i]][c[1][p]+dy[i]]==0&&a[c[0][p]+dx[i]][c[1][p]+dy[i]]!=0)
				{
					u++;
					c[0][u]=c[0][p]+dx[i];
					c[1][u]=c[1][p]+dy[i];
					vizr[c[0][p]+dx[i]][c[1][p]+dy[i]]=vizr[c[0][p]][c[1][p]]+1;
				}
			
		p++;
	}
	c[0][1]=x2;
	c[1][1]=y2;
	vizj[x2][y2]=1;
	p=u=1;
	while(p!=u+1)
	{
		
			for(i=0;i<8;i++)
				if(vizj[c[0][p]+dx[i]][c[1][p]+dy[i]]==0&&a[c[0][p]+dx[i]][c[1][p]+dy[i]]!=0)
				{
					u++;
					c[0][u]=c[0][p]+dx[i];
					c[1][u]=c[1][p]+dy[i];
					vizj[c[0][p]+dx[i]][c[1][p]+dy[i]]=vizj[c[0][p]][c[1][p]]+1;
				}
		
		p++;
	}
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(vizr[i][j]==vizj[i][j]&&vizr[i][j]!=0)
			{
				if(vizr[i][j]<min) 
				{
					min=vizr[i][j];
					b[0]=i;
					b[1]=j;
				}
			}
		}
	}
	g<<min<<" "<<b[0]<<" "<<b[1];
	return 0;
}