Cod sursa(job #1052057)

Utilizator andreimdvMoldovan Andrei andreimdv Data 10 decembrie 2013 20:36:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.35 kb
#include<fstream>
#include<iostream>
#include<cstdio>
using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");

char s[110];

struct str{int lin,col;};
str ro,ju,coada[10009],v,w;
int dmin,x,y,mr[101][101],i,j,n,m,mj[101][101];
int dl[8]={-1,-1,0,1,1,1,0,-1};
int dc[8]={0,1,1,1,0,-1,-1,-1};

int main()
{
    fin>>n>>m;
    for(i=1;i<=n;i++)
    {
        fin.get();
        fin.get(s,m+1);
        for(j=0;j<m;j++)
        {
            if(s[j]=='R')
            {
                ro.lin=i;
                ro.col=j+1;
                mr[ro.lin][ro.col]=1;
            }
            else
            {
                if(s[j]=='J')
                {
                    ju.lin=i;
                    ju.col=j+1;
                    mj[ju.lin][ju.col]=1;
                }
                else
                {
                    if(s[j]=='X')
                    {
                        mr[i][j+1]=-1;
                        mj[i][j+1]=-1;
                    }
                }
            }
        }
    }
    for(i=0;i<=max(n,m);i++)
    {
        mr[0][i]=-1;
        mr[n+1][i]=-1;
        mr[i][0]=-1;
        mr[i][m+1]=-1;
        mj[0][i]=-1;
        mj[n+1][i]=-1;
        mj[i][0]=-1;
        mj[i][m+1]=-1;
    }
    //afisare

        for(i=1;i<=n;i++)
        {   for(j=1;j<=n;j++)
                cout<<mr[i][j]<<" ";
            cout<<'\n';
        }
    //afisare
    int l=0,r=0;
    coada[0]=ro;
    while(l<=r)
    {
        v=coada[l];
        l++;

        for(i=0;i<8;i++)
        {
            w.lin=v.lin+dl[i];
            w.col=v.col+dc[i];
            if(mr[w.lin][w.col]==0)
            {
                mr[w.lin][w.col]=mr[v.lin][v.col]+1;
                r++;
                coada[r]=w;
            }
        }
    }
    //afisare
    cout<<'\n';
        for(i=1;i<=n;i++)
        {   for(j=1;j<=n;j++)
                {
                    if(mr[i][j]==-1)
                    cout<<"# ";
                    else
                    cout<<mr[i][j]<<" ";

                }
            cout<<'\n';
        }
    //afisare


     l=0,r=0;
    coada[0]=ju;
    while(l<=r)
    {
        v=coada[l];
        l++;

        for(i=0;i<8;i++)
        {
            w.lin=v.lin+dl[i];
            w.col=v.col+dc[i];
            if(mj[w.lin][w.col]==0)
            {
                mj[w.lin][w.col]=mj[v.lin][v.col]+1;
                r++;
                coada[r]=w;
            }
        }
    }

    //afisare
    cout<<'\n';
        for(i=1;i<=n;i++)
        {   for(j=1;j<=n;j++)
                {
                    if(mr[i][j]==-1)
                    cout<<"# ";
                    else
                    cout<<mj[i][j]<<" ";

                }
            cout<<'\n';
        }
    //afisare
dmin=1000000;
    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
        if(mr[i][j]!=-1&&mr[i][j]!=0&&mr[i][j]==mj[i][j])
        {
            if(mr[i][j]<dmin)
            {
                dmin=mr[i][j];
                x=i;
                y=j;
            }
            else
            {
                if(mr[i][j]==dmin&&j>y)
                {
                    x=i;
                    y=j;

                }
            }
        }
    }
    fout<<dmin<<" "<<x<<" "<<y<<'\n';






    return 0;
}