Cod sursa(job #1671443)

Utilizator TeoShefuTauCalin Teodor Georgian TeoShefuTau Data 1 aprilie 2016 18:26:04
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.02 kb
#include <iostream>
#include <fstream>
#include <cstring>

using namespace std;


struct pereche{int lin,  col;} cr[10000], cj[10000], z;
int dl[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dc[8]={1, 0, -1, 0, -1, 1, 1, -1};

int rom[101][101], jul[101][101];
char c[101];
int n, m, minim=10000000, prim, ultim, ln, cn, p1, p2, i, j;

int main()
{ifstream fin("rj.in");
 ofstream gout("rj.out");
 fin>>n>>m;
 fin.get();
 for(i=1; i<=n; ++i)
    { fin.getline(c,100);
      for(j=0; j<=m-1; ++j)
        {if(c[j]=='X') {rom[i][j+1]=-1; jul[i][j+1]=-1;}
         else  if(c[j]==' ') {rom[i][j+1]=0; jul[i][j+1]=0;}
            else if(c[j]=='R') {rom[i][j+1]=1; jul[i][j+1]=0; cr[1].lin=i; cr[1].col=j+1;}
                else {rom[i][j+1]=0; jul[i][j+1]=1; cj[1].lin=i; cj[1].col=j+1;}
        }
    }

 for(i=0; i<=m+1; ++i)
    rom[0][i]=rom[n+1][i]=jul[0][i]=jul[n+1][i]=-1;
 for(i=0; i<=n+1; ++i)
    rom[i][0]=rom[i][m+1]=jul[i][0]=jul[i][m+1]=-1;



 prim=ultim=1;
 while(prim<=ultim)
    { z=cr[prim];
      for(i=0; i<=7; ++i)
            { ln=z.lin+dl[i];
              cn=z.col+dc[i];
              if(rom[ln][cn]==0)
                { ++ultim;
                  cr[ultim].lin=ln;
                  cr[ultim].col=cn;
                  rom[ln][cn]=rom[z.lin][z.col]+1;
                }
            }
        prim++;
    }

 prim=ultim=1;
 while(prim<=ultim)
    { z=cj[prim];
      for(i=0; i<=7; ++i)
            { ln=z.lin+dl[i];
              cn=z.col+dc[i];
              if(jul[ln][cn]==0)
                { ++ultim;
                  cj[ultim].lin=ln;
                  cj[ultim].col=cn;
                  jul[ln][cn]=jul[z.lin][z.col]+1;
                }
            }
        prim++;
    }

 for(i=1; i<=n; ++i)
    for(j=1; j<=m; ++j)
        { if(rom[i][j]==jul[i][j] && rom[i][j]>1)
            if(rom[i][j]<minim)
                {minim=rom[i][j];
                 p1=i;
                 p2=j;
                }
        }
 gout<<minim<<" "<<p1<<" "<<p2;



 return 0;
}