Cod sursa(job #2313992)

Utilizator Fantastic_Mantudor voicu Fantastic_Man Data 7 ianuarie 2019 18:42:04
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.29 kb
#include <fstream>
#include <cstring>
#define MAX 100
using namespace std;
struct pairs {
    int lin;
    int col;
};
pairs queue[MAX*MAX+1],sol;
int R[MAX+2][MAX+2];
int J[MAX+2][MAX+2];
char c[MAX+1];
int dl[8]={-1,-1, 0, 1, 1, 1, 0,-1};
int dc[8]={ 0, 1, 1, 1, 0,-1,-1,-1};
int n,m;
void lee(int a[][MAX+2],int x,int y) {
    int first,last,l,c;
    first=last=1;
    queue[first].lin=x;
    queue[first].col=y;
    while(first<=last) {
        l=queue[first].lin; c=queue[first].col;
        for(int k=0;k<8;k++) {
            if(a[l+dl[k]][c+dc[k]]==0){
                last++;
                queue[last].lin=l+dl[k];
                queue[last].col=c+dc[k];
                a[l+dl[k]][c+dc[k]]=a[l][c]+1;
            }
        }
        first++; ///stergem din coada primul element
    }
}
ifstream fin("rj.in");
ofstream fout("rj.out");
int main()
{
    int n,m,i,j,ri,rj,ji,jj,min;
    fin>>n>>m;
    fin.getline(c,1);
    for(i=1;i<=n;i++) {
        fin.getline(c+1,MAX+1);
        for(j=1;j<=m;j++) {
            if(c[j]==' ')
                R[i][j]=J[i][j]=0;
            else if(c[j]=='X')
                R[i][j]=J[i][j]=-1;
            else {
                if(c[j]=='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;
                }
            }
        }
    }
    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;
    lee(R,ri,rj);
    lee(J,ji,jj);
    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';
    }*/
    fout<<min<<" "<<sol.lin<<" "<<sol.col;

    return 0;
}