Cod sursa(job #2190636)

Utilizator NewGuyAlbertDanila Albert NewGuyAlbert Data 31 martie 2018 13:15:41
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

const int dx[]={-1,-1,-1,0,1,1,1,0};
const int dy[]={-1,0,1,1,1,0,-1,-1};
int n,m,a[101][101],xi,xf,yi,yf;
char s[101];

void citire(int &n, int &m, int &xi, int &yi, int &xf, int &yf)
{
    int i,j;
    ifstream f("rj.in");
    f>>n>>m;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            a[i][j]=0;
    f.get();
    for( i=0;i<n;i++)
    {
        f.getline(s,101);
        for( j=0;j<m;j++)
       {
            if(s[j]=='X')
                a[i][j]=-1;
            if(s[j]=='R')
            {
                a[i][j]=1;
                xi=i;
                yi=j;
            }
            if(s[j]=='J')
            {
                a[i][j]=0;
                xf=i;
                yf=j;
            }
       }
    }
    f.close();

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

void lee( int i, int j, int n,int m)
{
    int cx[101*101], cy[101*101], k ,ii,jj,pi,ps;
    cx[0]=i;
    cy[0]=j;
    a[i][j]=1;
    pi=0;
    ps=0;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            ii=cx[pi]+dx[k];
            jj=cy[pi]+dy[k];
            if(bune(ii,jj,n,m))
                if(a[ii][jj]==0)
                {
                    a[ii][jj]=a[cx[pi]][cy[pi]]+1;
                    ps++;
                    cx[ps]=ii;
                    cy[ps]=jj;
                }
        }
        pi++;
    }
}

void afisare(int n, int m)
{
    ofstream g("rj.out");
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
            {
            if(a[i][j]==a[xf][yf]/2+1)
                g<<a[xf][yf]/2+1<<" "<<i+1<<" "<<j+1;
            }
    }
    g.close();
}

int main()
{
    citire (n,m,xi,yi,xf,yf);
    lee(xi,yi,n,m);
    afisare (n,m);
    return 0;
}