Cod sursa(job #1993730)

Utilizator shantih1Alex S Hill shantih1 Data 23 iunie 2017 17:37:03
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <cmath>
#include <fstream>

using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");

string z;
short n, m, i, j, nr, rj[102][102], prim, ultim, k, t, x, y;
short dl[]={-1, -1, 0, 1, 1, 1, 0, -1}, cl[]={0, -1, -1, -1, 0, 1, 1, 1};

struct  oras
{	short lin, col;   } c[12000], pr, pj, ve, p;

int main () {
	
	fin >> n >> m;
	getline(fin, z);
	for (i = 1; i <= n; i++)
	{
		getline(fin, z);
		for (j = 0; j < z.size(); j++)
		{
			if (z[j]=='R')
			{	pr.lin = i;	pr.col = j+1;  }
			if (z[j]=='J')
			{	pj.lin = i;	pj.col = j+1;  }
			else if (z[j]=='X')
				rj[i][j+1] = 10017;
			else rj[i][j+1]=0;
		}
	}
	
	rj[pr.lin][pr.col]=-1;
	rj[pj.lin][pj.col]=1;
	c[1]=pr;	c[0]=pj;
	prim=0;	ultim=1;
	bool ok = 0;
	while (ok == 0 || nr != 5)
	{
		p=c[prim];	prim++;
		
		for (k = 0; k < 8; k++)
		{
			ve.lin = p.lin+dl[k];	ve.col = p.col+cl[k];
			if (((rj[ve.lin][ve.col] > 0 && rj[p.lin][p.col] < 0) || (rj[ve.lin][ve.col] < 0 && rj[p.lin][p.col] > 0)) && rj[ve.lin][ve.col] != 10017 && (abs(rj[ve.lin][ve.col]) == t || ok == 0))
			{
				if (ve.lin < x || ok == 0) {	x = ve.lin;  y = ve.col;   }
				if (ve.lin == x && ve.col < y)	y = ve.col;
				t = abs(rj[ve.lin][ve.col]);	ok = 1;
			}
			if (rj[ve.lin][ve.col] == 0 && ve.lin > 0 && ve.lin <= n && ve.col > 0 && ve.col <= n)
			{
				if (rj[p.lin][p.col] > 0)	rj[ve.lin][ve.col]=rj[p.lin][p.col]+1;
				if (rj[p.lin][p.col] < 0)	rj[ve.lin][ve.col]=rj[p.lin][p.col]-1;
				ultim++;	c[ultim]=ve;
			}
		}
		if (ok == 1)	nr++;
	}
	
	fout << t << " " << x << " " << y << "\n";
}