Cod sursa(job #700749)

Utilizator seba209Ciurescu Sebastian seba209 Data 1 martie 2012 11:48:02
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include<fstream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
struct comp
{ 
	int lin,col;
};
int t,q,a,b,x,y,i,p,k,tmin=9000,poz[2],dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},val,j,yi,xf,xi,yf,h[200][200],w[200][200],g[4],sw;
char m[200][200];
comp c[5000],c1[5000];           
int main()                   
{   
	in>>t>>q;
	in.get();
	while(in.getline(m[i],101))
		i++;
	for(i=0;i<t;i++)
		for(j=0;j<q;j++)
			if(m[i][j]=='X')
				h[i][j]=w[i][j]=-1;
			else
				if(m[i][j]=='R'||m[i][j]=='J')
				{	
					h[i][j]=w[i][j]=0;
					g[k]=i;
					k++;
					g[k]=j;
					k++;
				}
	c[1].lin=xi=g[0];
	c[1].col=yi=g[1];
	x=1;y=1;
	while(x<=y)
	{	val=h[c[x].lin][c[x].col];
		for(i=0;i<=7;i++)
		{   a=c[x].lin+dl[i];
			b=c[x].col+dc[i];
			if(!((xi==a&&yi==b)||h[a][b]>0)&&(a>=0&&a<=t&&b>=0&&b<=q)&&h[a][b]<=val&&h[a][b]!=-1)
			{	h[a][b]=val+1;
				y++;
				c[y].lin=a;
				c[y].col=b;
			}
		}
		x++;
	}
	c[1].lin=xi=g[2];
	c[1].col=yi=g[3];
	x=1;y=1;
	while(x<=y)
	{	val=w[c[x].lin][c[x].col];
		for(i=0;i<=7;i++)
		{   a=c[x].lin+dl[i];
			b=c[x].col+dc[i];
			if(!((xi==a&&yi==b)||w[a][b]>0)&&(a>=0&&a<=t&&b>=0&&b<=q)&&w[a][b]<=val&&w[a][b]!=-1)
			{	w[a][b]=val+1;
				y++;
				c[y].lin=a;
				c[y].col=b;
			}
		}
		x++;
	}
/*
	for(i=0;i<t;i++)
	{	for(j=0;j<q;j++)
			out<<h[i][j]<<" ";
	out<<'\n';
	}
	out<<'\n';
	for(i=0;i<t;i++)
	{	for(j=0;j<q;j++)
			out<<w[i][j]<<" ";
	out<<'\n';
	}
	out<<'\n';*/
	for(i=0;i<t;i++)
		for(j=0;j<q;j++)
			if(h[i][j]==w[i][j]&&h[i][j]!=-1&&w[i][j]!=-1&&h[i][j]!=0)
				if(h[i][j]<tmin)
				{
					tmin=h[i][j];
					poz[0]=i;
					poz[1]=j;
				}
	out<<tmin+1<<" "<<poz[0]+1<<" "<<poz[1]+1;
}