Cod sursa(job #1142679)

Utilizator cameliamartMart Camelia cameliamart Data 14 martie 2014 01:43:47
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include<fstream>
#include<cstring>
using namespace std;
int a[101][101],b[101][101];
typedef struct{int x,y;}COADA;
COADA c[10201],d[10201];
int dx[]={0,0,1,1,1,0,-1,-1,-1};
int dy[]={0,1,1,0,-1,-1,-1,0,1};
void BF(int X1,int Y1,int n,int m,int a[][101])
{
	int p,u,i,xn,yn,x,y;
	p=u=1;
    c[u].x=X1;
    c[u].y=Y1;
    a[X1][Y1]=1;
    while(p<=u)
    {
        x=c[p].x;
        y=c[p].y;
        for(i=1;i<=8;i++)
        {
            xn=x+dx[i];
            yn=y+dy[i];
            if(xn>=0&&xn<n&&yn>=1&&yn<=m&&a[xn][yn]==0)
            {
                a[xn][yn]=a[x][y]+1;
                c[++u].x=xn;
                c[u].y=yn;
            }
        }
        p++;
    }
}
int main()
{
    ifstream f("rj.in");
    ofstream g("rj.out");
    int n,m,i,j,ok,p,u,X1,Y1,X2,Y2,x,y,k;
    char s[101];
    f>>n>>m;
    i=0;
    while(!f.eof())
    {
        f.getline(s,101);
        j=1;
        for(k=0;k<strlen(s);k++)
        {
            if(s[k]=='X') {a[i][j]=-3;b[i][j]=-3;}
                else if(s[k]=='R')
                    {X1=i; Y1=j;}
                else if(s[k]=='J')
                    {X2=i; Y2=j;}
            j++;
        }
        i++;
    }
    BF(X1,Y1,n,m,a);
	BF(X2,Y2,n,m,b);
	int min,mini,minj;
	min=10201;
    for(i=0;i<n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0&&a[i][j]<min)
			{
				min=a[i][j];
				mini=i;
				minj=j;
			}
	g<<a[mini][minj]<<" "<<mini<<" "<<minj;
    f.close();
    g.close();
    return 0;
}