Cod sursa(job #1022323)

Utilizator Mitsa3Neamt Mihai Mitsa3 Data 5 noiembrie 2013 09:46:38
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.67 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <iomanip>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
queue < pair < int,int > > coada;
#define MAX 102

void lee(int a[MAX][MAX])
{
    int i,j;
    while(!coada.empty())
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();

        if(!a[i-1][j-1])
        {
            a[i-1][j-1]=a[i][j]+1;
            coada.push(make_pair(i-1,j-1));
        }
        if(!a[i-1][j])
        {
            a[i-1][j]=a[i][j]+1;
            coada.push(make_pair(i-1,j));
        }
        if(!a[i][j-1])
        {
            a[i][j-1]=a[i][j]+1;
            coada.push(make_pair(i,j-1));
        }
        if(!a[i-1][j+1])
        {
            a[i-1][j+1]=a[i][j]+1;
            coada.push(make_pair(i-1,j+1));
        }
        if(!a[i+1][j-1])
        {
            a[i+1][j-1]=a[i][j]+1;
            coada.push(make_pair(i+1,j-1));
        }
        if(!a[i][j+1])
        {
            a[i][j+1]=a[i][j]+1;
            coada.push(make_pair(i,j+1));
        }
        if(!a[i+1][j])
        {
            a[i+1][j]=a[i][j]+1;
            coada.push(make_pair(i+1,j));
        }
        if(!a[i+1][j+1])
        {
            a[i+1][j+1]=a[i][j]+1;
            coada.push(make_pair(i+1,j+1));
        }

    }


}

int a[MAX][MAX],b[MAX][MAX];

char mat[MAX][MAX];
int i2[3],j2[3];
int main()
{
    int i,j,n,m;
    fin >> n >> m;
    fin.get(mat[0][0]);

    for(i=1;i<=n;i++)
    {
        mat[i][0]=1;
        fin.getline(mat[i]+1,m+5);

    }


    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(mat[i][j]=='R')
            {
                i2[1]=i;
                j2[1]=j;
            }
            else if(mat[i][j]=='J')
            {
                i2[2]=i;
                j2[2]=j;
            }
            else if(mat[i][j]=='X')
            {
                a[i][j]=b[i][j]=-1;
            }
            else
                mat[i][j]=' ';

        }
        mat[i][m+1]=0;
    }



    for(i=0;i<=m+1;i++)
    {
        a[0][i]=-1;
        b[0][i]=-1;
        a[n+1][i]=-1;
        b[n+1][i]=-1;
    }
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        b[i][0]=-1;
        a[i][m+1]=-1;
        b[i][m+1]=-1;
    }

    coada.push(make_pair(i2[1],j2[1]));
    a[i2[1]][j2[1]]=1;
    lee(a);

    coada.push(make_pair(i2[2],j2[2]));
    b[i2[2]][j2[2]]=1;
    lee(b);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            cout<<setw(4)<<b[i][j];
        }
        cout<<"\n";
    }

    return 0;
}