Cod sursa(job #670903)

Utilizator alex_ovidiunituAlex Ovidiu Nitu alex_ovidiunitu Data 30 ianuarie 2012 13:36:19
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.69 kb
#include<iostream>
#include<fstream>
#include<iomanip>
using namespace std;
int R[101][101], J[101][101];
int lin[]={2,-1,-1,0,+1,+1,+1,0,-1};
int col[]={2,0,+1,+1,+1,0,-1,-1,-1};
int qlin[101*101],qcol[101*101];
void Lee(int a[101][101], int n, int m, int l, int c)
{
	int i,j,p,u;
	p=u=0;
	u++;
	qlin[u]=l;
	qcol[u]=c;
	while (p!=u)
	{
		p++;
		if (p==101*101)
			p=1;
		l=qlin[p];
		c=qcol[p];
		for (i=1;i<=8;i++)
		{
			int l1=l+lin[i], c1=c+col[i];
			if (l1>=1 && c1>=1 && l1<=n && c1<=m)
				if (a[l1][c1]==0 || a[l1][c1]>a[l][c]+1)
				{
					a[l1][c1]=a[l][c]+1;
					u++;
					if (u==101*101)
						u=1;
					qlin[u]=l1;
					qcol[u]=c1;
				}
		}
	}
}
			
	
int main(void)
{
	int n,m,i,j,lr,cr,lj,cj;
	fstream f,g;
	f.open("rj.in",ios::in);
	g.open("rj.out",ios::out);
	f>>n>>m;
	f.get();
	for (i=1;i<=n;i++)
	{
		char c;
		for (j=1;j<=m;j++)
		{
			
			f>>noskipws>>c;
			//if (c==13 || c==10)
				//continue;
			switch(c)
			{
				case ' ': R[i][j]=J[i][j]=0;break;
				case 'R': R[i][j]=1;J[i][j]=-1;lr=i;cr=j;break;
				case 'J': J[i][j]=1; R[i][j]=-1;lj=i;cj=j;break;
				case 'X': R[i][j]=J[i][j]=-1;break;
			}
		}
		f.get();
	}
	Lee(R,n,m,lr,cr);
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
			cout<<setw(4)<<R[i][j]<<"  ";
			cout<<endl;
	
	}
	
	Lee(J,n,m,lj,cj);
	cout<<endl<<endl;
	for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
			cout<<setw(4)<<J[i][j]<<"  ";
			cout<<endl;
	
	}
	//return 0;
	int min=15000,lf,cf;
	for (i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			if (R[i][j]==J[i][j] && R[i][j]>0 && J[i][j]>0 &&  min> R[i][j])
			{				
				min=R[i][j];
				lf=i;
				cf=j;
			}
		}
	g<<min<<" "<<lf<<" "<<cf;	
}