Cod sursa(job #2190672)

Utilizator poptartbr1Gigi Gigi poptartbr1 Data 31 martie 2018 14:49:30
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 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[][101])
{
    ifstream f("rj.in");
    f>>n>>m;
    int i,j;
    char s[101];
    f.get();
    for(i=0;i<n;i++)
    {
        f.getline(s,101);
        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>=0 && i<n) && (j>=0 && j<m);
}

void lee(int n, int m, int a[][101], int ij, int jj)
{
    int cx[101],cy[101],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++;
    }
}

void afis(int a[][101], int n, int m)
{
    int i,j;
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            cout << a[i][j] << " ";
        cout << endl;
    }
    cout << endl;
}


int main()
{
    int n,i,j,m,ij,jj,ir,jr,a[101][101],b[101][101];
    read(n,m,ij,jj,ir,jr,a);
    afis(a,n,m);
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            b[i][j]=a[i][j];
    lee(n,m,a,ij,jj);
    lee(n,m,b,ir,jr);
    afis(a,n,m);
    afis(b,n,m);
    int mini=10000,x,y;
    for(i=0;i<n;i++)
        for(j=0;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+1 << " " << y+1;
    o.close();
    return 0;
}