Cod sursa(job #702429)

Utilizator aciobanusebiCiobanu Sebastian aciobanusebi Data 1 martie 2012 21:48:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include<stdio.h>
#include<limits.h>
struct coord
	{
		int x,y;
	};
void bordare(int a[101][101], int n, int m)
{
	int i;
	for(i=0;i<=n+1;i++)
		a[i][0]=a[i][m+1]=-1;
	for(i=0;i<=m+1;i++)
		a[0][i]=a[n+1][i]=-1;
}
void lee(int m[101][101],coord poz)
{
	int x,y,inc=1,sf=0;
	coord coada[10201];
	sf++;
	coada[sf].x=poz.x;
	coada[sf].y=poz.y;
	while(inc<=sf)
	{
		x=coada[inc].x;
		y=coada[inc].y;
		if(m[x+1][y]==0) 
		{
			sf++;
			coada[sf].x=x+1;
			coada[sf].y=y;
			m[x+1][y]=m[x][y]+1;
		}
		if(m[x-1][y]==0) 
		{
			sf++;
			coada[sf].x=x-1;
			coada[sf].y=y;
			m[x-1][y]=m[x][y]+1;
		}
		if(m[x][y+1]==0) 
		{
			sf++;
			coada[sf].x=x;
			coada[sf].y=y+1;
			m[x][y+1]=m[x][y]+1;
		}
		if(m[x][y-1]==0) 
		{
			sf++;
			coada[sf].x=x;
			coada[sf].y=y-1;
			m[x][y-1]=m[x][y]+1;
		}
		if(m[x+1][y+1]==0) 
		{
			sf++;
			coada[sf].x=x+1;
			coada[sf].y=y+1;
			m[x+1][y+1]=m[x][y]+1;
		}
		if(m[x+1][y-1]==0) 
		{
			sf++;
			coada[sf].x=x+1;
			coada[sf].y=y-1;
			m[x+1][y-1]=m[x][y]+1;
		}
		if(m[x-1][y-1]==0) 
		{
			sf++;
			coada[sf].x=x-1;
			coada[sf].y=y-1;
			m[x-1][y-1]=m[x][y]+1;
		}
		if(m[x-1][y+1]==0) 
		{
			sf++;
			coada[sf].x=x-1;
			coada[sf].y=y+1;
			m[x-1][y+1]=m[x][y]+1;
		}
		inc++;
	}
}
int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	int n,m,m1[101][101],m2[101][101];
	char c;
	scanf("%d%d",&n,&m);
	scanf("%c",&c);
	int i,j;
	coord poz1,poz2;
	for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
			{
				scanf("%c",&c);
				if(c=='R') { m1[i][j]=1;poz1.x=i; poz1.y=j;}
				else if(c=='J') { m2[i][j]=1; poz2.x=i; poz2.y=j; }
				else if(c=='X') m1[i][j]=m2[i][j]=-1;
				else if(c==' ') m1[i][j]=m2[i][j]=0;
			}
			scanf("%c",&c);
	}
	bordare(m1,n,m);
	bordare(m2,n,m);
	lee(m1,poz1);
	lee(m2,poz2);
	int x1=0,y1=0,tmin=INT_MAX;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(m1[i][j]==m2[i][j]&&m1[i][j]!=0&&m1[i][j]!=-1)
			{
				if(m1[i][j]<tmin) 
					{
						tmin=m1[i][j];
						x1=i;
						y1=j;
				}
			}
	printf("%d %d %d\n",tmin,x1,y1);
	for(i=1;i<=n;i++)
		{for(j=1;j<=m;j++)
			printf("%d ",m1[i][j]);
		printf("\n");}
		printf("\n");
	for(i=1;i<=n;i++)
		{for(j=1;j<=m;j++)
			printf("%d ",m2[i][j]);
		printf("\n");}
		return 0;
}