Cod sursa(job #1980864)

Utilizator tudorr98Rotaru Tudor tudorr98 Data 14 mai 2017 11:38:20
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.81 kb
#include <fstream>
#include <string.h>
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 citire (int &n, int &m, int R[][101], int J[][101], int &lr, int &cr, int &lj, int &cj)
{
    int i,j;
    char linie[101];
    ifstream in ("rj.in");
    in>>n>>m;
    in.get();
    for(i=1;i<=n;i++)
    {
        in.getline(linie,101,'\n');
        for(j=0;j<m;j++)
        {
            if(linie[j]=='R') {lr=i;cr=j+1;}
            if(linie[j]=='J') {lj=i;cj=j+1;}
            if(linie[j]==' ') {R[i][j+1]=0; J[i][j+1]=0;}
            if(linie[j]=='X') {R[i][j+1]=-1; J[i][j+1]=-1;}
        }
    }
    in.close();
}

int bune (int ii,int jj, int n, int m)
{
    return (ii>=1 and ii<=n and jj>=1 and jj<=m);
}

void rec (int n, int m, int R[][101], int i, int j, int pas)
{
    int ii,jj,k;
    for(k=0;k<8;k++)
    {
        ii=i+dx[k];
        jj=j+dy[k];
        if(bune(ii,jj,n,m))
            if(R[ii][jj]==0 or R[ii][jj]>pas)
            {
                R[ii][jj]=pas;
                rec(n,m,R,ii,jj,pas+1);
            }
    }
}

void minn_afis (int n, int m, int R[][101], int J[][101])
{
    int i,j,minn,ii,jj;
    minn=10000;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
        if(R[i][j]==J[i][j])
            if(R[i][j]>0)
                if(R[i][j]<minn)
                  {
                      minn=R[i][j];
                      ii=i;
                      jj=j;
                  }
     ofstream out ("rj.out");
     out<<minn<<" "<<ii<<" "<<jj;
     out.close();
}

int main()
{
    int R[101][101],J[101][101],n,m,lr,cr,lj,cj;
    citire(n,m,R,J,lr,cr,lj,cj);
    R[lr][cr]=1; R[lj][cj]=0;
    rec(n,m,R,lr,cr,2);
    J[lj][cj]=1; J[lr][cr]=0;
    rec(n,m,J,lj,cj,2);
    minn_afis(n,m,R,J);
    return 0;
}