Cod sursa(job #1375559)

Utilizator mihaiilieMihai Ilie mihaiilie Data 5 martie 2015 13:37:39
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.63 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int m,n,i,j,xr,yr,xj,yj,dy[100],dx[100],p,u,x[8],y[8],mi,aj[100][100],ar[100][100];
char a[100][100];
bool gasit=false;
void citire()
{
    f>>m>>n;
    f.get();
    for(i=1;i<=m;i++)
    {
        for(j=1;j<=n;j++)
        {
            a[i][j]=f.get();
            if(a[i][j]=='J')
            {
                xj=i;
                yj=j;
            }
            if(a[i][j]=='R')
            {
                xr=i;
                yr=j;
            }
        }
        f.get();
    }
    for(j=0;j<=n+1;j++)
    {
        a[0][j]='X';
        a[m+1][j]='X';
    }
    for(i=1;i<=m;i++)
    {
        a[i][0]='X';
        a[i][n+1]='X';
    }
    for(i=0;i<=m+1;i++)
        for(j=0;j<=n+1;j++)
        {
            aj[i][j]=9;
            ar[i][j]=9;
        }
}
void afisare()
{
    for(i=1;i<=m;i++)
    {
       for(j=1;j<=n;j++)
        cout<<aj[i][j]<<" ";
       cout<<endl;
    }
}
void afisare1()
{
    for(i=1;i<=m;i++)
    {
       for(j=1;j<=n;j++)
        cout<<ar[i][j]<<" ";
       cout<<endl;
    }
}
void R()
{
    x[0]=0;x[1]=1;x[2]=1;x[3]=1;x[4]=0;x[5]=-1;x[6]=-1;x[7]=-1;
    y[0]=-1;y[1]=-1;y[2]=0;y[3]=1;y[4]=1;y[5]=1;y[6]=0;y[7]=-1;
    p=1;u=1;
    dx[p]=xr;
    dy[p]=yr;
    p=0;
    ar[xr][yr]=1;
    while(p<=u)
    {
        p++;
        for(i=0;i<=7;i++)
        if(a[dx[p]+x[i]][dy[p]+y[i]]==' '||a[dx[p]+x[i]][dy[p]+y[i]]=='J')
        {
            a[dx[p]+x[i]][dy[p]+y[i]]='y';
            u++;
            dx[u]=dx[p]+x[i];
            dy[u]=dy[p]+y[i];
            ar[dx[u]][dy[u]]=ar[dx[p]][dy[p]]+1;
        }
    }
}
void J()
{
    x[0]=0;x[1]=1;x[2]=1;x[3]=1;x[4]=0;x[5]=-1;x[6]=-1;x[7]=-1;
    y[0]=-1;y[1]=-1;y[2]=0;y[3]=1;y[4]=1;y[5]=1;y[6]=0;y[7]=-1;
    p=1;u=1;
    dx[p]=xj;
    dy[p]=yj;
    p=0;
    aj[xj][yj]=1;
    while(p<=u)
    {
        p++;
        for(i=0;i<=7;i++)
        if(a[dx[p]+x[i]][dy[p]+y[i]]=='y'||a[dx[p]+x[i]][dy[p]+y[i]]=='R')
        {
            a[dx[p]+x[i]][dy[p]+y[i]]=' ';
            u++;
            dx[u]=dx[p]+x[i];
            dy[u]=dy[p]+y[i];
            aj[dx[u]][dy[u]]=aj[dx[p]][dy[p]]+1;
        }
    }
    aj[xj][yj]=1;
}
void verificare()
{
    mi=1000000;
    for(i=1;i<=m;i++)
       for(j=1;j<=n;j++)
          if(ar[i][j]==aj[i][j]&&mi>aj[i][j])
          {
             mi=ar[i][j];
             xr=i;
             yr=j;
          }
    g<<mi<<" "<<xr<<" "<<yr;

}
int main()
{
    citire();
    R();
    J();
    verificare();
}