Cod sursa(job #579724)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 12 aprilie 2011 13:42:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.39 kb
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#include <fstream.h>
#define DIM 101
FILE *f=fopen("rj.in","r");
ofstream g("rj.out");
int n,m;
char a[DIM][DIM],b[DIM][DIM];
int R[DIM][DIM],J[DIM][DIM];
int di[8]={-1,1,0,0,-1,1,1,-1};
int dj[8]={0,0,1,-1,-1,1,-1,1};

struct deplasare{
	int i;
	int j;
};
deplasare c[1002];

void coada(char x,char y,int i,int j,char a[DIM][DIM],int R[DIM][DIM]){
	int p=1,u=1;
	c[p].i=i;
	c[p].j=j;
	a[i][j]=y;
	while(p<=u){
		for(register int d=0;d<=7;d++){
			int iv=c[p].i+di[d];
			int jv=c[p].j+dj[d];
			if(a[iv][jv]==x){
				a[iv][jv]=y;
				c[++u].i=iv;
				c[u].j=jv;
				R[iv][jv]=R[c[p].i][c[p].j]+1;
			}
		}
		p++;
	}
}

int main(void){
	register int i,j;

	fscanf(f,"%d %d\n",&n,&m);
	for(i=1;i<=n;i++){
		fgets(a[i]+1,10001,f);
		for(j=strlen(a[i]+1)-1;j<=m;j++){
			if(a[i][j]!='X' && a[i][j]!='R' && a[i][j]!='J')
				a[i][j]=' ';
		}
		a[i][m+1]=0;
		strcpy(b[i]+1,a[i]+1);
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(a[i][j]=='R')
				coada(' ','.',i,j,a,R);
			if(b[i][j]=='J')
				coada(' ','.',i,j,b,J);
		}
	}

	int cordi,cordj;
	int min=INT_MAX;
	for(i=1;i<=n;i++){
		for(j=1;j<=m;j++){
			if(R[i][j]>0 && J[i][j]==R[i][j] && R[i][j]<min)
				min=R[i][j],cordi=i,cordj=j;
		}
	}
	g<<min+1<<" "<<cordi<<" "<<cordj;
	fclose(f);
	g.close();
	return 0;
}