Cod sursa(job #222972)

Utilizator georgepalPal George Catalin georgepal Data 26 noiembrie 2008 15:26:42
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include<fstream.h>
char a[30][30];
int n,m,b[50][50],mat[50][50];
typedef struct {int x,y;} coada;
coada c[100];
int xr,yr,xj,yj,dx[8]={1,0,-1,0,1,-1,1,-1}, dy[8]={0,-1,0,1,-1,1,1,-1},k,l;
void citire()
	{
	ifstream f("rj.in");
	f>>n>>m;
	for(int i=1;i<=n;i++)
		for(int j=1;j<=m;j++)
			{f>>a[i][j];
			if(a[i][j]=='R') {xr=i;yr=j;b[i][j]=mat[i][j]=0;}
			else if(a[i][j]=='J') {xj=i;yj=j;b[i][j]=mat[i][j]=0;}
			     else if(a[i][j]=='X') b[i][j]=mat[i][j]=-1;
				  else b[i][j]=mat[i][j]=0;
			}
	}
void BFS(int x,int y , int q[][50])
	{
	int p=1,u=1,k1,l1;
	c[u].x=x;
	c[u].y=y;
	q[x][y]=1;
	while(u>=p)
		{
		k=c[p].x;
		l=c[p].y;
		for(int i=0;i<=7;i++)
			{
			k1=k+dx[i];
			l1=l+dy[i];
			if(k1>=1 && k1<=n && l1>=1 && l1<=m && q[k1][l1]==0);
				{
				c[++u].x=k1;
				c[u].y=l1;
				q[k1][l1]=q[k][l]+1;
				}
			}
		p++;}
	}
void main()
	{
        int min=32000,i,j,p,q;
	citire();
	BFS(xr,yr,b);
	BFS(xj,yj,mat);
	for(i=1;i<=n;j++)
		for(j=1;j<=m;j++)
			if(b[i][j]==mat[i][j] && b[i][j]<min)
				{
				p=i;
				q=j;
                                min=b[i][j];
				}
        ofstream g("rj.out");
	g<<min<<" "<<p<<" "<<q;
	g.close();
        }