Cod sursa(job #1142674)

Utilizator cameliamartMart Camelia cameliamart Data 14 martie 2014 01:21:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include<fstream.h>
#include<string.h>
int a[101][101],b[101][101];
typedef struct{int x,y;}COADA;
COADA c[31000],d[31000];
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 X2,int Y2,int n,int m,int a[][101])
{
	int p,u,ok,i,xn,yn,x,y;
	p=u=1;ok=0;
    c[u].x=X1;
    c[u].y=Y1;
    a[X1][Y1]=1;
    while(p<=u&&ok==0)
    {
        x=c[p].x;
        y=c[p].y;
        for(i=1;i<=8;i++)
        {
            xn=x+dx[i];
            yn=y+dy[i];
            if(xn>=1&&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;
                if(xn==X2&&yn==Y2)ok=1;
            }
        }
        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,xn,yn,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,Y1,Y2,n,m,a);
	BF(X2,Y2,X1,Y1,n,m,b);
	int min,mini,minj;
	min=31000;
    ok=0;
    for(i=1;i<=n&&ok==0;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;
}