Cod sursa(job #385462)

Utilizator forever_yangGroza Marius-Cristian forever_yang Data 22 ianuarie 2010 19:21:54
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.61 kb
#include<stdio.h>
#include<fstream>
using namespace std;
FILE *f;

struct cuvant{int x,y;}c[20000];
struct matrice{int val,ind;}a[105][105];
int n,m,i,j,ic=1,sc=0,lun=32000,xx,yy;
char cc,linie[105];

void lant(int x,int y)
{
while(ic<=sc)
	{
	if(a[x-1][y-1].val==a[x][y].val+1&&a[x-1][y-1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x-1;yy=y-1;}
			if(lun==a[x][y].val+1&&yy>y-1)
			{xx=x-1;yy=y-1;}
			}
			else
				if(a[x-1][y-1].val==0&&x-1>=1&&y-1>=1)
				{sc++;
				c[sc].x=x-1;
				c[sc].y=y-1;
				a[x-1][y-1].val=a[x][y].val+1;
				a[x-1][y-1].ind=a[x][y].ind;}

if(a[x-1][y].val==a[x][y].val+1&&a[x-1][y].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x-1;yy=y;}
			if(lun==a[x][y].val+1&&yy>y)
			{xx=x-1;yy=y;}
			}
			else
				if(a[x-1][y].val==0&&x-1>=1)
				{sc++;
				c[sc].x=x-1;
				c[sc].y=y;
				a[x-1][y].val=a[x][y].val+1;
				a[x-1][y].ind=a[x][y].ind;}

if(a[x-1][y+1].val==a[x][y].val+1&&a[x-1][y+1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x-1;yy=y+1;}
			if(lun==a[x][y].val+1&&yy>y+1)
			{xx=x-1;yy=y+1;}
			}
			else
				if(a[x-1][y+1].val==0&&x-1>=1&&y+1<=m)
				{sc++;
				c[sc].x=x-1;
				c[sc].y=y+1;
				a[x-1][y+1].val=a[x][y].val+1;
				a[x-1][y+1].ind=a[x][y].ind;}

if(a[x][y-1].val==a[x][y].val+1&&a[x][y-1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x;yy=y-1;}
			if(lun==a[x][y].val+1&&yy>y-1)
			{xx=x;yy=y-1;}
			}
			else
				if(a[x][y-1].val==0&&y-1>=1)
				{sc++;
				c[sc].x=x;
				c[sc].y=y-1;
				a[x][y-1].val=a[x][y].val+1;
				a[x][y-1].ind=a[x][y].ind;}
				
if(a[x+1][y-1].val==a[x][y].val+1&&a[x+1][y-1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x+1;yy=y-1;}
			if(lun==a[x][y].val+1&&yy>y-1)
			{xx=x+1;yy=y-1;}
			}
			else
				if(a[x+1][y-1].val==0&&x+1<=n&&y-1>=1)
				{sc++;
				c[sc].x=x+1;
				c[sc].y=y-1;
				a[x+1][y-1].val=a[x][y].val+1;
				a[x+1][y-1].ind=a[x][y].ind;}
		

if(a[x+1][y].val==a[x][y].val+1&&a[x+1][y].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x+1;yy=y;}
			if(lun==a[x][y].val+1&&yy>y)
			{xx=x+1;yy=y;}
			}
			else
				if(a[x+1][y].val==0&&x+1<=n)
				{sc++;
				c[sc].x=x+1;
				c[sc].y=y;
				a[x+1][y].val=a[x][y].val+1;
				a[x+1][y].ind=a[x][y].ind;}

				
if(a[x+1][y+1].val==a[x][y].val+1&&a[x+1][y+1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x+1;yy=y+1;}
			if(lun==a[x][y].val+1&&yy>y+1)
			{xx=x+1;yy=y+1;}
			}
			else
				if(a[x+1][y+1].val==0&&x+1<=n&&y+1<=m)
				{sc++;
				c[sc].x=x+1;
				c[sc].y=y+1;
				a[x+1][y+1].val=a[x][y].val+1;
				a[x+1][y+1].ind=a[x][y].ind;}

if(a[x][y+1].val==a[x][y].val+1&&a[x][y+1].ind!=a[x][y].ind)
			{if(lun>a[x][y].val+1)
				{lun=a[x][y].val+1;xx=x;yy=y+1;}
			if(lun==a[x][y].val+1&&yy>y+1)
			{xx=x;yy=y+1;}
			}
			else
				if(a[x][y+1].val==0&&y+1<=m)
				{sc++;
				c[sc].x=x;
				c[sc].y=y+1;
				a[x][y+1].val=a[x][y].val+1;
				a[x][y+1].ind=a[x][y].ind;}

ic++;
lant(c[ic].x,c[ic].y);
}



	
}

int main()
{
f=fopen("rj.in","r");
ifstream ff("rj.in");
ofstream g("rj.out");
ff>>n>>m;
fgets(linie,100,f);
for(i=1;i<=n;i++)
	{fgets(linie,100,f);
	for(j=0;j<m;j++)
	{cc=linie[j];	
	if(cc=='X')
		a[i][j+1].val=-1;
	else
		if(cc=='R')
		{	a[i][j+1].val=1;
		a[i][j+1].ind=1;
		sc++;
		c[sc].x=i;
		c[sc].y=j+1;
		}
		else
			if(cc=='J')
		{	a[i][j+1].val=1;
				a[i][j+1].ind=2;
		sc++;
		c[sc].x=i;
		c[sc].y=j+1;
		}
		}}
lant(c[ic].x,c[ic].y);
g<<lun<<" "<<xx<<" "<<yy;


return 0;}