Cod sursa(job #1155766)

Utilizator vlad008Stan Vladut Angel vlad008 Data 27 martie 2014 10:23:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <stdio.h>
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int min,i,j,n,m,x1,x2,y1,y2,ju[102][102],r[102][102],p,u,c,cl[10001],cc[10001],ic,jc,iv,jv;char a[101][101],x;
int dl[8]={-1,-1,-1,0,1,1,1,0};
int dc[8]={-1,0,1,1,1,0,-1,-1};
int main() 
{    
	fscanf(f,"%d%d",&n,&m);   
	fscanf(f,"%c",&c);  
	for(i=1;i<=n;i++)
	{      
		for(j=1;j<=m;j++)
		{       
			fscanf(f,"%c",&x);     
			if(x=='X')
			{           
				a[i][j]=1;             
				r[i][j]=ju[i][j]=-1;         
			}           
			else          
				if(x=='R')
				{  
					x1=i;        
					y1=j;   
				}
				else   
					if(x=='J')
					{       
						x2=i;    
						y2=j;    
					}   
		}       
		fscanf(f,"%c",&c);  
	}       
	for(i=0;i<=n+1;i++)   
		r[i][0]=r[i][m+1]=ju[i][0]=ju[i][m+1]=-1;  
	for(i=1;i<=m;i++)    
		r[0][i]=r[n+1][i]=ju[0][i]=ju[n+1][i]=-1;     
	cl[1]=x1;   
	cc[1]=y1;   
	r[x1][y1]=1;   
	p=u=1;   
	while(p<=u)
	{ 
        ic=cl[p];     
		jc=cc[p];     
		for(i=0;i<=7;i++)
		{   
			iv = ic + dl[i];      
			jv = jc + dc[i];      
			if(a[iv][jv]==0&&r[iv][jv]==0)
			{              
				r[iv][jv]=r[ic][jc]+1;  
				u++;            
				cl[u]=cl[p]+dl[i];        
				cc[u]=cc[p]+dc[i];        
			}        
		}       
		p++;    
	}         
	cl[1]=x2;  
	cc[1]=y2;  
	ju[x2][y2]=1;   
	p=u=1;  
	while(p<=u)
	{        
		ic = cl[p];     
		jc = cc[p];    
		for(i=0;i<=7;i++)
			{           
				iv = ic + dl[i];  
				jv = jc + dc[i];  
				if(a[iv][jv]==0&&ju[iv][jv]==0)
				{         
					ju[iv][jv]=ju[ic][jc]+1;   
					u++;            
					cl[u]=cl[p]+dl[i];     
					cc[u]=cc[p]+dc[i];     
				}    
			}      
		p++;    
	}     
	min=1000000000;  
	for(i=1;i<=n;i++)   
		for(j=1;j<=m;j++)  
			if(r[i][j]==ju[i][j]&&r[i][j]<min&&r[i][j]>0)
			{           
				x1=i;       
				y1=j;          
				min=r[i][j];     
			}         
	printf("%d %d %d",min,x1,y1);   
	fclose(g); 
	fclose(f);   
	return 0;
}