Cod sursa(job #2312433)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 4 ianuarie 2019 20:51:20
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.61 kb
#include <iostream>
#define MAX 100
using namespace std;
struct coada {
    int lin;
    int col;
};
coada q[MAX*MAX+1],sol;
char R[MAX+2][MAX+2];
char J[MAX+2][MAX+2];
int dl[8]={-1,-1, 0, 1, 1, 1, 0,-1};
int dc[8]={ 0, 1, 1, 1, 0,-1,-1,-1};
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    int n,m,first,last,i,j,ri,rj,ji,jj,min,l,c,k;
    char ch;
    scanf("%d %d\n",&n,&m);
    for(i=1;i<=n;i++) {
        for(j=1;j<=m;j++) {
            ch=fgetc(stdin);
            if(ch==' ')
                R[i][j]=J[i][j]=0;
            else if(ch=='X')
                R[i][j]=J[i][j]=-1;
            else {
                if(ch=='R') {
                    ri=i;
                    rj=j;
                    R[i][j]=1;
                    J[i][j]=0;
                }
                else {
                    ji=i;
                    jj=j;
                    J[i][j]=1;
                    R[i][j]=0;
                }
            }
        }
        fgetc(stdin);
    }
    for(i=0;i<=n+1;i++)
        R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
    for(j=0;j<=m+1;j++)
        R[0][j]=R[n+1][j]=J[0][j]=J[n+1][j]=-1;
    first=last=1;
    q[first].lin=ri;
    q[first].col=rj;
    while(first<=last) {
        l=q[first].lin; c=q[first].col;
        for(k=0;k<8;k++) {
            if(R[l+dl[k]][c+dc[k]]==0){
                last++;
                q[last].lin=l+dl[k];
                q[last].col=c+dc[k];
                R[l+dl[k]][c+dc[k]]=R[l][c]+1;
            }
        }
        first++; ///stergem din coada primul element
    }
    first=last=1;
    q[first].lin=ji;
    q[first].col=jj;
    while(first<=last) {
        l=q[first].lin; c=q[first].col;
        for(k=0;k<8;k++) {
            if(J[l+dl[k]][c+dc[k]]==0){
                last++;
                q[last].lin=l+dl[k];
                q[last].col=c+dc[k];
                J[l+dl[k]][c+dc[k]]=J[l][c]+1;
            }
        }
        first++; ///stergem din coada primul element
    }
    min=MAX*MAX+1;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(R[i][j]==J[i][j] && R[i][j]>0)
                if(R[i][j]<min) {
                    min=R[i][j];
                    sol.lin=i;
                    sol.col=j;
                }
    for(i=1;i<=n;i++) {
  /*      for(j=1;j<=m;j++) {
            if(R[i][j]>=0)
                cout<<" ";
            cout<<(int)R[i][j]<<" ";
        }
        cout<<"   ";
        for(j=1;j<=m;j++) {
            if(J[i][j]>=0)
                cout<<" ";
            cout<<(int)J[i][j]<<" ";
        }
        cout<<'\n';
    }*/
    cout<<min<<" "<<sol.lin<<" "<<sol.col;

    return 0;
}
///Cristian Francu ajuta