Cod sursa(job #261092)

Utilizator andyciupCiupan Andrei andyciup Data 17 februarie 2009 21:07:45
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.87 kb
#include<stdio.h>
int m, n, a[50][50],b[50][50], rx, ry, jx, jy;
int d1[8]={1, 1, 1, -1, -1, -1, 0, 0};
int d2[8]={-1, 0, 1, -1, 0, 1, -1, 1} ;

struct cva{
	int ics;
	int  igrec;
	};
cva coada1[2500], coada2[2500];
void citesc(){
	char s[101];
	int i,j;
	scanf("%d", &n);
	scanf("%d\n", &m);
	for(i=1; i<=n;++i){
		gets(s);
		for(j=0; s[j] ; ++j)
		{
			if(s[j]==' '){
				a[i][j+1]=0;
				b[i][j+1]=0;
				}
			if(s[j]=='X'){
				a[i][j+1]=-1;
				b[i][j+1]=-1;
				}
			if(s[j]=='R'){
				a[i][j+1]=1;
				b[i][j+1]=0;
				rx=i;ry=j+1;
				}
			if(s[j]=='J'){
				a[i][j+1]=0;
				b[i][j+1]=1;
				jx=i;
				jy=j+1;
				}
		}


	}


}

void bordez(){
	int i;
	for(i=0; i<=m+1;++i)

	{
		a[0][i]=-1;
		b[0][i]=-1;
		a[n+1][i]=-1;
		b[n+1][i]=-1;
	}
	for(i=0; i<=n+1;++i)
	{
		a[i][0]=-1;
		b[i][0]=-1;
		a[i][m+1]=-1;
		b[i][m+1]=-1;
	}
}


void romeo(cva coad[], int aa[][50], int x, int y){
	int i, p=0, u=0;
	coad[u].ics=x;
	coad[u].igrec=y;
	u++;
	while(p!=u){
		x=coad[p].ics;
		y=coad[p].igrec;
		p++;
		for(i=0; i<=7;++i){
			if(aa[x+d1[i]][y+d2[i]]==0){
				coad[u].ics=x+d1[i];
				coad[u].igrec=y+d2[i];
				u++;
				aa[x+d1[i]][y+d2[i]]=1+aa[x][y];
				}
			}
		}
	}


void scrie(int a[50][50])
{
	for(int i=1;i<=n;++i)
	{
		for(int j=1;j<=m;++j)
			printf("%4d",a[i][j]);
		printf("\n");
	}
	printf("\n");
}

int main(){
	freopen("rj.in", "r", stdin);
	freopen("rj.out", "w", stdout);
	citesc();
	int i, j;
	bordez();
	romeo(coada1, a, rx, ry);
	romeo(coada2, b, jx, jy);
	int bun1=0;
	//scrie(a);
	//scrie(b);
	int bun2=0;
	a[0][0]=14000;
	for(i=1; i<=n;++i)
		for(j=1; j<=m;++j)
			if(a[i][j]==b[i][j]&&a[i][j]>0)
				if(a[i][j]<a[bun1][bun2]){
					bun1=i;
					bun2=j;
					}
	printf("%d ", a[bun1][bun2]);
	printf("%d ", bun1);
	printf("%d\n", bun2);





	return 0;
}