Cod sursa(job #2197623)

Utilizator poptartbr1Gigi Gigi poptartbr1 Data 22 aprilie 2018 16:37:04
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.35 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};

int a[105][105],b[105][105];
int n,m;
char s[105][105];
void read(int &ij ,int &jj, int &ir, int &jr)
{
    ifstream f("rj.in");
    f>>n>>m;
    int i,j;
    f.get();
    for(i=1;i<=n;i++)
    {

        f.getline(s[i]+1,105);
        for(j=1;j<=m;j++)
        {
            if(s[i][j]==' ')
                a[i][j]=0;
            else if(s[i][j]=='X')
                a[i][j]=-1;
            else if(s[i][j]=='J')
            {
                ij=i;
                jj=j;
            }
            else if(s[i][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 a[][105],int ij, int jj)
{
    int cx[105*105],cy[105*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 i,j,ij,jj,ir,jr;
    read(ij,jj,ir,jr);
    ofstream o("rj.out");
    for(i=1;i<=n;i++)
        for(j=1;j<=n;j++)
            b[i][j]=a[i][j];
    lee(a,ij,jj);
    lee(b,ir,jr);
    int mini=100000,x=0,y=0;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(a[i][j] > 0 && b[i][j] > 0)
                if(a[i][j]==b[i][j])
                {
                    if(a[i][j]<mini)
                    {
                        mini=a[i][j];
                        x=i;
                        y=j;
                    }
                    else if(a[i][j]==mini)
                        if(i<x)
                    {
                        mini=a[i][j];
                        x=i;
                        y=j;
                    }
                }
        }
    }
    o << mini << " " << x << " " << y;
    o.close();
    return 0;
}