Cod sursa(job #2116467)

Utilizator buzauioanaBuzau Ioana buzauioana Data 27 ianuarie 2018 17:42:29
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>
#define N 102
using namespace std;
struct coord{int x,y;};
coord c[N*N];
int a[N][N], b[N][N];
int xj,yj,xr,yr,n,m;
int dx[]={0,1, 0,-1, 1,1,-1,-1};
int dy[]={1,0,-1, 0,-1,1,-1, 1};
void afis()
{
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
            cout<<b[i][j];
        cout<<endl;
    }
}
void citire()
{
    char c;
    ifstream fin("rj.in");
    fin>>n>>m;
    fin.get();
    for(int i=1;i<=n;i++)
    {
        for (int j=1;j<=m;j++)
        {
            c=fin.get();
                if(c=='R')
                {
                    xr=i;
                    yr=j;
                }
                else
                    if(c=='J')
                {
                    xj=i;
                    yj=j;
                }
                else
                    if(c=='X')
                    a[i][j]=b[i][j]=-1;
        }
        c=fin.get();
    }
}
int interior(int x,int y)
{
    if(x>0&& y>0 && x<=n &&y<=m)
        return 1;
    return 0;
}
void lee( int a[][N], int x, int y)
{
    int p,u,xv,yv,i;
    p=u=1;
    c[u].x=x;
    c[u].y=y;
    a[x][y]=1;
    while(p<=u)
    {
        x=c[p].x;
        y=c[p++].y;
        for(i=0;i<=7;i++)
        {
            xv=x+dx[i];
            yv=y+dy[i];
            if(interior(xv,yv)&& a[xv][yv]==0)
            {
                c[++u].x=xv;
                c[u].y=yv;
                a[xv][yv]=1+a[x][y];
            }
        }
    }
}

int main()
{
    ofstream fout("rj.out");
    int x,y;
    citire();

    lee(a,xr,yr);

    lee(b,xj,yj);
    int mini=N*N;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        if(a[i][j]==b[i][j]&& a[i][j]<=mini && a[i][j]>0)
    {
        mini=a[i][j];
        x=i;
        y=j;
    }
    fout<<x<<" "<<y<<" "<<mini;
    fout.close();
    return 0;
}