Cod sursa(job #502812)

Utilizator IulianBoboUAIC Boboc Iulian IulianBobo Data 20 noiembrie 2010 15:14:17
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include<fstream.h>
#include<limits.h>
#include<iostream.h>
#include<string.h>
typedef struct{int x1,y1,x2,y2,r,j;}COADA;
int N,M,n,m,c,d;
int interior(int m,int n){if(m>=1 && m<=N && n>=1 && n<=M) return 1;else return 0;}
int main ()
{
	ifstream f("rj.in");
	ofstream g("rj.out");
	COADA C[9801],a,b,e[203][203];
	int x,y,p,u,i,j,xn,yn,ok,x1,y1,x2,y2,tmin=INT_MAX;
	char c,v[101][101];
	int dx[]={0,-1,0,1,0,-1,1,1,-1};
	int dy[]={0,0,1,0,-1,1,1,-1,-1};
	f>>N>>M;
	c=f.get();
	for(i=1;i<=N;i++){
		for(j=1;j<=M;j++){
			c=f.get();v[i][j]=c;
			if(v[i][j]=='R') {a.r=i;b.r=j;e[i][j].r=e[i][j].j=0;} //indici romeo
			else if(v[i][j]=='J') {a.j=i;b.j=j;e[i][j].r=e[i][j].j=0;} //indici julieta
			else if(v[i][j]==' ') e[i][j].r=e[i][j].j=0;
			else if(v[i][j]=='X') e[i][j].r=e[i][j].j=-3;
		}
		c=f.get();
	}
	p=u=1;C[u].x1=a.r;C[u].y1=b.r;ok=0; //coordonate romeo 1 si 1
	while(p<=u && ok==0){
		x1=C[p].x1;y1=C[p].y1;
		for(i=1;i<=8;i++){
			xn=x1+dx[i];
			yn=y1+dy[i];
			if(interior(xn,yn)==1 && e[xn][yn].r==0){
				e[xn][yn].r=e[x1][y1].r+1;
				C[++u].x1=xn;C[u].y1=yn; //introduc coordonatele lui romeo in coada
				if(xn==a.j && yn==b.j) ok=1;
			}
		}
		p++;
	}
	for(i=1;i<=u;i++) cout<<C[i].x1<<" "<<C[i].y1<<"\n";
	for(i=1;i<=N;i++){
		for(j=1;j<=M;j++) cout<<e[i][j].r<<" ";
		cout<<"\n";
	}
	cout<<"\n";
	for(i=1;i<=N;i++){
		for(j=1;j<=M;j++) cout<<e[i][j].j<<" ";
		cout<<"\n";
	}
	p=u=1;C[u].x2=a.j;C[u].y2=b.j;v[a.j][b.j]='1';ok=0; //coordonate julieta 5 si 3
	while(p<=u && ok==0){
		x2=C[p].x2;y2=C[p].y2;
		for(i=1;i<=8;i++){
			xn=x2+dx[i];
			yn=y2+dy[i];
			if(interior(xn,yn)==1 && e[xn][yn].j==0){
				e[xn][yn].j=e[x2][y2].j+1;
				C[++u].x2=xn;C[u].y2=yn; //introduc coordonatele julietei in coada
				if(xn==a.r && yn==b.r) ok=1;
			}
		}
		p++;
	}
	for(i=1;i<=u;i++) cout<<C[i].x2<<" "<<C[i].y2<<"\n";
	for(i=1;i<=N;i++){
		for(j=1;j<=M;j++) cout<<e[i][j].j<<" ";
		cout<<"\n";
	}
	ok=0;
	for(i=1;i<N;i++){
		for(j=1;j<=M;j++){
			if(e[i][j].r==e[i][j].j && e[i][j].r!=-3 && e[i][j].r>0 && e[i][j].r+1<tmin) { tmin=e[i][j].r+1;x=i;y=j;}
		}
	}
	g<<tmin<<" "<<x<<" "<<y;
	f.close();
	g.close();
	return 0;
}