Cod sursa(job #2190681)

Utilizator poptartbr1Gigi Gigi poptartbr1 Data 31 martie 2018 14:59:17
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};

void read(int &n, int &m, int &ij ,int &jj, int &ir, int &jr, int a[][105])
{
    ifstream f("rj.in");
    f>>n>>m;
    int i,j;
    char s[105];
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(s,105);
        for(j=0;j<m;j++)
        {
            if(s[j]==' ')
                a[i][j]=0;
            else if(s[j]=='X')
                a[i][j]=1;
            else if(s[j]=='J')
            {
                ij=i;
                jj=j;
            }
            else if(s[j]=='R')
            {
                ir=i;
                jr=j;
            }
        }
    }
    f.close();
}

int bune(int i, int j, int n, int m)
{
    return(i>=1 && i<=n) && (j>=1 && j<=m);
}

void lee(int n, int m, int a[][105], int ij, int jj)
{
    int cx[105],cy[105],i,j,pi,ps,k;
    pi=0;ps=0;cx[0]=ij;cy[0]=jj;
    a[ij][jj]=1;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            i=cx[pi]+dx[k];
            j=cy[pi]+dy[k];
            if(bune(i,j,n,m))
            {
                if(a[i][j]==0)
                {
                    a[i][j]=a[cx[pi]][cy[pi]]+1;
                    ps++;
                    cx[ps]=i;
                    cy[ps]=j;
                }
            }
        }
        pi++;
    }
}

int main()
{
    int n,i,j,m,ij,jj,ir,jr,a[105][105],b[105][105];
    read(n,m,ij,jj,ir,jr,a);
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            b[i][j]=a[i][j];
    lee(n,m,a,ij,jj);
    lee(n,m,b,ir,jr);
    int mini=10000,x,y;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j] && a[i][j] < mini && a[i][j] > 1)
        {
            mini=a[i][j];
            x=i;
            y=j;
        }
    ofstream o("rj.out");
    o << mini << " " << x << " " << y+1;
    o.close();
    return 0;
}