Cod sursa(job #1247629)

Utilizator LipanmateiLipan Radu-Matei Lipanmatei Data 23 octombrie 2014 09:11:37
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <cstdio>
#include <fstream>
using namespace std;
ofstream fout("rj.out");
int a[101][101],b[101][101];
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
struct {int x,y;}Cr[10001];
struct {int x,y;}Cj[10001];
int interior(int x,int y,int n,int m)
{
    if(x>=1&&y<=m&&y>=1&&x<=n)return 1;
    else return 0;
}
int main()
{
    FILE *rj;
    rj=fopen("rj.in","r");
    char c;
    int n,m,i,j,j1,j2,r1,r2,p,u,x,y,v1,v2,ok;
    fscanf(rj,"%d""%d",&n,&m);
    for(i=1;i<=n;i++)
    {
        fscanf(rj,"%c",&c);
        for(j=1;j<=m;j++)
            {
                fscanf(rj,"%c",&c);
                if(c=='J'){j1=i;j2=j;}
                if(c=='R'){r1=i;r2=j;}
                if(c=='X'){a[i][j]=-1;b[i][j]=-1;}
            }
    }
    p=u=1;
    Cr[u].x=r1;
    Cr[u].y=r2;
    a[r1][r2]=1;
    while(p<=u)
    {
        x=Cr[p].x;
        y=Cr[p++].y;
        for(i=0;i<=7;i++)
        {
            v1=x+dx[i];
            v2=y+dy[i];
            if(interior(v1,v2,n,m)&&a[v1][v2]==0)
            {
                Cr[++u].x=v1;
                Cr[u].y=v2;
                a[v1][v2]=a[x][y]+1;
            }
        }
    }
    p=u=1;
    Cj[u].x=j1;
    Cj[u].y=j2;
    b[j1][j2]=1;
    while(p<=u)
    {
        x=Cj[p].x;
        y=Cj[p++].y;
        for(i=0;i<=7;i++)
        {
            v1=x+dx[i];
            v2=y+dy[i];
            if(interior(v1,v2,n,m)&&b[v1][v2]==0)
            {
                Cj[++u].x=v1;
                Cj[u].y=v2;
                b[v1][v2]=b[x][y]+1;
            }
        }
    }
    ok=0;
    for(i=1;i<=n&&ok==0;i++)
       for(j=1;j<=m&&ok==0;j++)
          if(a[i][j]==b[i][j]&&a[i][j]>=1)
          {
              ok=1;
              fout<<a[i][j]<<' '<<i<<' '<<j;
          }
    return 0;
}