Cod sursa(job #477099)

Utilizator barcanvirgilBarcan Virgil-Gheorghe barcanvirgil Data 13 august 2010 14:15:44
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.14 kb
# include <cstdio>
# define  N  101
# define  M  101   
using namespace std;
    int n,a[N][M],b[N][M],i,j,ob,x,y,Q[N*M+1][2],m,x1,x2,tmin=0,ics1,ics2;
	char caracter;
	const int dx[]= {-1, 0, 1, 0, 1, 1,-1,-1};
	const int dy[]= { 0, 1, 0,-1, 1,-1, 1,-1};
	void lee (int a[N][M]){
		for (int st=0,dr=1;st<=dr;++st){
			int rec[2];//treb un for..
			rec[0]=Q[st][0];
	        rec[1]=Q[st][1];
			for (int k=0;k<8;++k){//ai 8 directii ma:P. ok
				int acm[2];
				acm[0]=rec[0]+dx[k];
				acm[1]=rec[1]+dy[k];
		        if (acm[0]>0 and acm[0]<=n and acm[1]>0 and acm[1]<=m){//coloana..:P
					if (a[acm[0]][acm[1]]==0){
						a[acm[0]][acm[1]]=a[rec[0]][rec[1]]+1;
						Q[dr][0]=acm[0];
						Q[dr][1]=acm[1];
						++dr;
						/*if (acm[0]==x && acm[1]==y){
							tmin=a[acm[0]][acm[1]];
							//printf ("%d\n",a[acm[0]][acm[1]]);
							return ; //aici nu!!! ca tu formazi toata matricea   da oleaca sa afiseze a[][] si b[][]
						}*/
					}
				}
			}
		}
	}

    int main (){
		freopen ("rj.in","r",stdin);
		freopen ("rj.out","w",stdout);
		scanf ("%d%d",&n,&m);
		scanf ("%c",&caracter);
		while (caracter!='\n') scanf ("%c",&caracter);
		for (i=1;i<=n;++i){
			for (j=1;j<=m;++j){
			scanf ("%c",&caracter);
			if(caracter=='R'){
				a[i][j]=1;
				x1=i; x2=j;
			}
			if(caracter=='X'){
				a[i][j]=-1;
				b[i][j]=-1;
			}else  
			if(caracter=='J'){
				x=i; y=j;
				b[i][j]=1;
			}
			}
		if (caracter !='\n')
		    scanf ("%c",&caracter);
		while (caracter!='\n' && i<n) scanf ("%c",&caracter);//da-i compile-run
		}//deci el nu vede J-ul stai
			//for (i=1;i<=n;++i,printf ("\n"))
			//	for (j=1;j<=m;++j) printf ("%d",b[i][j]);
		ics1=x;
		ics2=y;
		/*for (i=1;i<=n;++i,printf("\n"))
            for (j=1;j<=n;++j){
				if (a[i][j]!=-1) printf(" "); 
				printf ("%d",a[i][j]);
			}*/	
		i=x1; j=x2; //gata am vazut:))
		Q[0][0]=i;//uite aici
		Q[0][1]=j;
		a[i][j]=1;
		lee (a);
		
		
		for (i=1;i<=n;++i/*,printf("\n")*/)
            for (j=1;j<=m;++j){
				//if (b[i][j]!=-1) printf(" "); 
				//printf ("%d",a[i][j]);
			}
	//	tmin/=2;
	//	printf("%d ",tmin);
	//	printf("%d %d\n",Q[tmin][0],Q[tmin][1]);
		//nu asa
		//stai
		
		/*for (i=1;i<=n;++i){
			for (j=1;j<=m;++j)
				printf("%d",a[i][j]);
			printf("\n");
		}*/
		//stai putin sa ma gandesc
		//stai ma... tu de ce faci Q[0][0]=i???daca tu ai poz de inceput x1 si y1 si x si y??? dai compile-run
		for (int i=1;i<=N*M;++i) Q[i][0]=Q[i][1]=0;
		Q[0][0]=ics1;
		Q[0][1]=ics2;
		b[i][j]=1;
		lee (b);
		//for (i=1;i<=n;++i,printf("\n"))
        //    for (j=1;j<=n;++j){
		//		if (a[i][j]!=-1) printf(" "); 
		//		printf ("%d",b[i][j]);
		//	}
		//printf("\n");
		/*for (i=1;i<=n;++i){
			for (j=1;j<=m;++j)
				printf("%d",b[i][j]);
			printf("\n");*/  
		//:Pe }//mai pai faci lee si pentru romeo si pentru julieta. am facut si asa. problema mea e cu citirea caracterului spatai asa
		//si acum
		int minim=100000000;
		for (i=1;i<=n;++i)
			for (j=1;j<=m;++j)//dai
				if (a[i][j]==b[i][j] && a[i][j]>0)
					if (minim>a[i][j]){
minim=a[i][j];
x=i;
y=j;
					}
		printf ("%d %d %d\n",minim,x,y);//
		return 0;
	}