Cod sursa(job #876852)

Utilizator CosminRusuCosmin Rusu CosminRusu Data 12 februarie 2013 11:09:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.67 kb
#include <fstream>
#include <limits.h>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
int n, m, q[3][10010], i, j, l[105][105],b[105][105], k, u, p, mini=INT_MAX;
char c , a[105];
void init()
{
    cin>>n>>m;
    cin.getline(a, 100);
    for(i=1;i<=n;i++){
        cin.getline(a, 100);
        for(j=0;j<m;j++)
            {
                c=a[j];
                if(c=='R')
                    {
                        k=1;
                        l[i][j+1]=0; //pornesc de la romeo
                        q[1][k]=i;
                        q[2][k]=j+1;
                    }
                else if(c=='X')   //poarta inchisa
                    {
                        l[i][j+1]=-2;
                        b[i][j+1]=-2;  //-2
                    }
                else if(c=='J')
                    {
                        l[i][j+1]=0;
                        b[i][j+1]=-3;
                    }
                else if(c==' ')
                    {
                        l[i][j+1]=-1;
                        b[i][j]=0;
                    }

            }
    }
}
void intr(int c, int d)
{
    u=u+1;
    q[1][u]=c;
    q[2][u]=d;
}
void extr(int &c, int &d)
{
    p=p+1;
    c=q[1][p];
    d=q[2][p];
}
void lee()
{
    int x, y;
    u=1;
    p=0;
    while(p!=u)
    {
            extr(x, y);
            if(x>1)
                if(b[x-1][y]==0)
                    if(l[x-1][y]>l[x][y]+1 || l[x-1][y]==-1)
                        {
                            l[x-1][y]=l[x][y]+1;
                            intr(x-1, y);
                        }
            if(x<n)
                if(b[x+1][y]==0)
                    if(l[x+1][y]>l[x][y]+1 || l[x+1][y]==-1)
                        {
                            l[x+1][y]=l[x][y]+1;
                            intr(x+1, y);
                        }
            if(y<m)
                if(b[x][y+1]==0)
                    if(l[x][y+1]>l[x][y]+1 || l[x][y+1]==-1)
                        {
                            l[x][y+1]=l[x][y]+1;
                            intr(x, y+1);
                        }
            if(y>1)
                if(b[x][y-1]==0)
                    if(l[x][y-1]>l[x][y]+1 || l[x][y-1]==-1)
                        {
                            l[x][y-1]=l[x][y]+1;
                            intr(x, y-1);
                        }

    }
    mini=min(l[q[1][x]][q[1][y]], mini);
}
int main()
{
    init();
  //  cout<<q[1][1]<<" "<<q[2][1];
    lee();
       for(i=1;i<=n;i++)
        {for(j=1;j<=m;j++)
            cout<<l[i][j]<<" ";

        cout<<"\n";}

    cout<<mini;
    return 0;
}