Cod sursa(job #1632099)

Utilizator mihaelacarinaCzupper Mihaela Carina mihaelacarina Data 5 martie 2016 21:26:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include <fstream>
using namespace std;
#define DimMax 20
#define DimMaxCoada 400
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
struct Element
{
    int l,c;
    unsigned d;
};
Element C[DimMaxCoada], x, y;
int A[DimMax][DimMax], n,m,x0,y0,i,j,k,IncC,SfC,dist,sw=0;
char s[101];
void citire()
{
    fin>>n>>m;
    fin.getline(s,101);
    for (i=1;i<=n;i++)
    {
        fin.getline(s,101);
        for (j=0;j<m;j++)
        {
            if (s[j]=='J')
            {
                A[i][j+1]=-1;
            }
            else if (s[j]=='R')
            {
                x0=i;
                y0=j+1;
                A[i][j+1]=-1;
            }
            else if (s[j]=='X') A[i][j+1]=-2;
            else A[i][j+1]=0;
        }
    }
}
void bordare()
{
    for(i=0;i<=n;i++)
        A[i][0]=A[i][m+1]=-2;
    for(i=0;i<=m;i++)
        A[0][i]=A[n+1][i]=-2;
}
void initializareCoada()
{
    x.l=x0;
    x.c=y0;
    x.d=0;
    A[x0][y0]=0;
    C[IncC]=x;
}
void LEE()
{
     while(IncC<=SfC)  //parcurgem
    {
        x=C[IncC++];
        for(k=0;k<4;k++)
        {
            y.l=x.l+dx[k];
            y.c=x.c+dy[k];
            if(A[y.l][y.c]==0) //poz libera
            {
                y.d=x.d+1;
                A[y.l][y.c]=y.d;
                C[++SfC]=y; //duc y in C
            }
            else if(A[y.l][y.c]==-1) //poz libera
            {
                y.d=x.d+1;
                A[y.l][y.c]=y.d;
                C[++SfC]=y; //duc y in C
                dist=y.d/2;
            }
        }
    }
    for (i=1; i<=n; i++)
    {
        for (j=1; j<=m; j++)
        cout<<A[i][j]<<" ";
        cout<<"\n";
    }
}
void afisare()
{
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
        if (A[i][j]==dist && sw==0)
    {
        fout<<dist<<" "<<i<<" "<<j;
        sw=1;
        break;
    }
}
int main()
{
    citire();
    bordare();
    initializareCoada();
    LEE();
    afisare();

    return 0;
}