Cod sursa(job #1511356)

Utilizator lokixdSebastian lokixd Data 26 octombrie 2015 17:49:36
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.45 kb
#include <fstream>
using namespace std;
ofstream g("rj.out");
char a [101][101];
int n,m,x[10201],y[10201],ar[101][101],aj[101][101];
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
void citire()
{int i;
ifstream f("rj.in");
f>>n>>m;
f.get();
for(i=0;i<n;i++)
{
    f.getline(a[i],101,'\n');
}
}
int bune(int i,int j)
{
    return (i>=0 && i<n && j>=0 && j<m);
}
void Lee(int arj[][101],int i,int j)
{int k,pi=0,ps=0,ii,jj;
x[0]=i;
y[0]=j;
arj[i][j]=1;
while(pi<=ps)
{   i=x[pi];
    j=y[pi];
    for(k=0;k<8;k++)
       {
        ii=i+dx[k];
        jj=j+dy[k];
        if(bune(ii,jj)==1)
            if(a[ii][jj]==' ')
                if(arj[ii][jj]==0 || arj[ii][jj]>arj[i][j]+1)
                {
                    arj[ii][jj]=arj[i][j]+1;
                    ps++;
                    x[ps]=ii;
                    y[ps]=jj;
                }
       }
    pi++;
}
}
int main()
{int i,j,xr,yr,xi,yi,xj,yj,min;
citire();
for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    {
        if(a[i][j]=='R')
        {xr=i;
         yr=j;}

        if(a[i][j]=='J')
        {xj=i;
         yj=j;}
    }
Lee(ar,xr,yr);
Lee(aj,xj,yj);
min=m*n+1;
for(i=0;i<n;i++)
    for(j=0;j<m;j++)
    if(ar[i][j]==aj[i][j] and ar[i][j]!=0)
        if(min>ar[i][j])
            {
                min=ar[i][j];
                xi=i;
                yi=j;
            }
            g<<min<<" "<<xi+1<<" "<<yi+1;
return 0;
}