Cod sursa(job #1993760)

Utilizator shantih1Alex S Hill shantih1 Data 23 iunie 2017 18:12:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.95 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[103][103], 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[120000], 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 (prim <= ultim && ok == 0)
	{
		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]) != abs(rj[p.lin][p.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;
			}
		}
	}
	
	for (i = 1; i <= n; i++)
	{
		for (j = 1; j <= m; j++)
			cout << rj[i][j] << " ";
		cout << "\n";
	}
	
	i = 1; j = 1;
	bool k1=0, k2=0;
	while (k1 == 0 || k2 == 0)
	{
		k1 = 0;	k2 = 0;
		p.lin = i;	p.col = j;
		if (rj[i][j] == t || rj[i][j] == t-t-t+1)
		{
			for (k = 0; k < 8; k++)
			{
				ve.lin = p.lin+dl[k];	ve.col = p.col+cl[k];
				if (rj[ve.lin][ve.col] == t-1)	k1 = 1;
				if (rj[ve.lin][ve.col] == t-t-t+1)	k2 = 1;
			}
		}
		
		if (k1 == 1 && k2 == 1)
		{	x = i;	y = j;	 }
		
		if (j < m)	j++;
		if (j == m)	{	j = 1; 	i++;   }
	}
	
	fout << t << " " << x << " " << y << "\n";
}