Cod sursa(job #1980867)

Utilizator XelamophosSilviu Melinte Xelamophos Data 14 mai 2017 11:46:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#include <iostream>
#include <string.h>
#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 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>0 and ii<=n and jj>0 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(i,j,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 min_afis(int n, int m,int r[][101],int J[][101])
{
    int i,j,minn,ii,jj;
    minn=10001;
    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;
    j[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);
    min_afis(n,m,r,j);

    return 0;
}