Cod sursa(job #1602048)

Utilizator pitradaPit-Rada Ionel-Vasile pitrada Data 16 februarie 2016 14:50:07
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <fstream>
using namespace std;
struct pozitie
{
    int lin,col;
};
pozitie coada[10009];
int N,M,pr,ul;
int dlin[8]={-1,-1,-1,0,0,1,1,1};
int dcol[8]={-1,0,1,-1,1,-1,0,1};
int R[102][102],J[102][102];
int RLIN,RCOL,JLIN,JCOL;
char s[102];
int main ()
{
    int i,j,l,c;
    int c1,l1,tmin;
    ifstream fin("rj.in");
    ofstream fout("rj.out");
    fin>>N>>M;
    fin.get();
    for(i=1;i<=N;i++)
    {
        fin.get(s,M+1,'\n');
        fin.get();
        for(j=0;j<=M-1;j++)
        {
            if(s[j]=='X')
            {
                R[i][j+1]=-1;
                J[i][j+1]=-1;
            }
            if(s[j]=='R')
            {
                RLIN=i;
                RCOL=j+1;
            }
            if(s[j]=='J')
            {
                JLIN=i;
                JCOL=j+1;
            }
        }
    }
    //Umplerea matricei R
    coada[1].lin=RLIN;
    coada[1].col=RCOL;
    pr=1;
    ul=1;
    R[RLIN][RCOL]=1;
    while(pr<=ul)
    {
        l=coada[pr].lin;
        c=coada[pr].col;
        for(int k=0;k<=7;k++)
        {
            l1=l+dlin[k];
            c1=c+dcol[k];
            if(l1>=1 && l1<=N && c1>=1 && c1<=M && R[l1][c1]==0)
            {
                R[l1][c1]=1+R[l][c];
                ul++;
                coada[ul].lin=l1;
                coada[ul].col=c1;
            }
        }
        pr++;
    }
    //Umplerea J
    coada[1].lin=JLIN;
    coada[1].col=JCOL;
    pr=1;
    ul=1;
    J[JLIN][JCOL]=1;
    while(pr<=ul)
    {
        l=coada[pr].lin;
        c=coada[pr].col;
        for(int k=0;k<=7;k++)
        {
            l1=l+dlin[k];
            c1=c+dcol[k];
            if(l1>=1 && l1<=N && c1>=1 && c1<=M && J[l1][c1]==0)
            {
                J[l1][c1]=1+J[l][c];
                ul++;
                coada[ul].lin=l1;
                coada[ul].col=c1;
            }
        }
        pr++;
    }
    tmin=M*N;
    for(i=1;i<=N;i++)
    {
        for(j=1;j<=M;j++)
        {
            if(R[i][j]==J[i][j] && R[i][j]!=-1 && R[i][j]>0 && R[i][j]<tmin )
           {
            tmin=R[i][j];
            l1=i;
            c1=j;
           }
        }
    }
    fout<<tmin<<" "<<l1<<" "<<c1;
    fin.close();
    fout.close();
    return 0;
}