Cod sursa(job #122439)

Utilizator savimSerban Andrei Stan savim Data 12 ianuarie 2008 14:00:05
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.13 kb
#include <stdio.h>
#include <string.h>
int main()
{
	int aa,p,s,x1,y1,x2,y2,i,j,k,n,m;
	char ss[101],c;
	int a[101][101],matr[101][101],matj[101][101];
	int d1[8]={-1,1,0,0,1,-1,-1,1};
	int d2[8]={0,0,-1,1,1,1,-1,-1};
	int lee[10001][2];

	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);

	scanf("%d %d",&n,&m);
	scanf("%c",&c);
	for (i=1; i<=n; i++)
	{
		fgets(ss,m+2,stdin);
		if (strlen(ss)-1<m) aa=strlen(ss)-1;
		else aa=m;

		for (j=0; j<=aa; j++)
        {
            if (ss[j]=='X') a[i][j+1]=1;
            else 
            {
                 a[i][j+1]=0;
                 if (ss[j]=='R')
                 {
					x1=i;
					y1=j+1;
				 }
				 if (ss[j]=='J')
				 {
					x2=i;
					y2=j+1;
				 }
			}
		}
		for (j=aa+1; j<=m; j++)
			a[i][j+1]=0;
	}
	for (i=1; i<=n; i++)
		for (j=1; j<=m; j++)
		{
			matr[i][j]=0;
			matj[i][j]=0;
		}

	p=0;s=1;
	lee[s][0]=x1;lee[s][1]=y1;matr[x1][y1]=1;
	while (p<s)
	{
		p++;
		for (i=0; i<=7; i++)
		{
			int h=lee[p][0]+d1[i];
			int o=lee[p][1]+d2[i];
			if (h>0 && h<=n && o>0 && o<=m && matr[h][o]==0 && a[h][o]==0)
			{
			   s++;
			   lee[s][0]=h;
			   lee[s][1]=o;
			   matr[h][o]=matr[lee[p][0]][lee[p][1]]+1;
			}
		}
	}

	p=0;s=1;
	lee[s][0]=x2;lee[s][1]=y2;matj[x2][y2]=1;
	while (p<s)
	{
		p++;
		for (i=0; i<=7; i++)
		{
			int h=lee[p][0]+d1[i];
			int o=lee[p][1]+d2[i];
			if (h>0 && h<=n && o>0 && o<=m && matj[h][o]==0 && a[h][o]==0)
            {
               s++;
               lee[s][0]=h;
               lee[s][1]=o;        
			   matj[h][o]=matj[lee[p][0]][lee[p][1]]+1;
            }     
        }
    }
        
    int min=32000;
    
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
        if (matr[i][j]==matj[i][j] && matr[i][j]!=0 && matr[i][j]<min)
           min=matr[i][j];
           
    for (i=1; i<=n; i++)
        for (j=1; j<=n; j++)
        if (matr[i][j]==matj[i][j] && matr[i][j]!=0 && matr[i][j]==min)
        {
           min=matr[i][j];
           printf("%d %d %d\n",min,i,j);
           return 0;
        }        
    printf("-1\n");
    return 0;    
}