Cod sursa(job #2490192)

Utilizator EparvanEugen Pirvan Eparvan Data 9 noiembrie 2019 21:33:25
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#include<iostream>
#define INF 20000000
#define N 103
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

struct rj{
	int x,y;
};

rj sr[N*N],sj[N*N];
int r[N][N],j[N][N],m,n;
const int lin[8]={1,-1,0,0,1,1,-1,-1};
const int col[8]={0,0,1,-1,1,-1,1,-1};

void leer(int x,int y){
	for(int t=0;t<8;t++)
		if(r[x+lin[t]][y+col[t]]==-2){
			sr[++sr[0].x].x=x+lin[t];
			sr[sr[0].x].y=y+col[t];
			r[x+lin[t]][y+col[t]]=r[x][y]+1;
		}
}
void leej(int x,int y){
	for(int t=0;t<8;t++)
		if(j[x+lin[t]][y+col[t]]==-2){
			sj[++sj[0].x].x=x+lin[t];
			sj[sj[0].x].y=y+col[t];
			j[x+lin[t]][y+col[t]]=j[x][y]+1;
		}
}
int main(){
	int i,p,min=INF,x,y;
	char c;
	fin>>m>>n;

	for (i=1;i<=m;++i)
    {
        for (p=1;p<=n+1;++p){
			fin.get(c);

			if (c=='R'){
				sr[1].x=i;
				sr[1].y=p;
				r[i][p]=1;
				j[i][p]=-2;
			}
            if (c=='J'){
				sj[1].x=i;
				sj[1].y=p;
				r[i][p]=-2;
				j[i][p]=1;
			}
			if (c=='X'){
				r[i][p]=-1;
				j[i][p]=-1;
            }
            if (c==' '){
               r[i][p]=-2;
               j[i][p]=-2;
            }
		}

    }

	sr[0].x=sj[0].x=1;
	for(i=1;i<=sr[0].x;i++)
		leer(sr[i].x,sr[i].y);
	for(i=1;i<=sj[0].x;i++)
		leej(sj[i].x,sj[i].y);
	for(i=1;i<=m;i++)
		for(p=1;p<=n;p++)
			if(r[i][p]>0)
				if(r[i][p]==j[i][p] && r[i][p]<min) {
					min=r[i][p];
					x=i;
					y=p;
				}

	fout<<min<<" "<<x<<" "<<y-1;
	return 0;
}