Cod sursa(job #1578849)

Utilizator dragosmdvMoldovan Dragos dragosmdv Data 24 ianuarie 2016 13:25:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <string>
#include <iomanip>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
string s;
struct str{
int x;
int y;
};
str e, r;
queue <str> q;

int j,a1[150][150],a2[150][150], n,m,i,ir,jr,ij,jj,dx[]={-1,1,1,-1,0, 1, 0, -1},dy[]={1,-1,1,-1,-1, 0, 1, 0},mini=500000,xm,ym;
char x;
void citire(){


fin>>n>>m;
getline(fin,s);
for(i=1;i<=n;i++)
{getline(fin,s);
 //cout<<s<<endl;
    for(j=1;j<=m;j++)


if(s[j-1]==' ')
{a1[i][j]=0;
 a2[i][j]=0;
}
else if(s[j-1]=='X')
{a1[i][j]=-1;
 a2[i][j]=-1;
}
else if(s[j-1]=='R')
{ir=i;jr=j;
    a1[i][j]=-5;
 a2[i][j]=-5;
}

else if(s[j-1]=='J')
{ij=i;jj=j;
    a1[i][j]=-8;
 a2[i][j]=-8
 ;
}
}


}
void bordare(){
for(i=0;i<=n+1;i++)
    {a1[i][0]=-1;
    a1[i][m+1]=-1;
    }
    for(i=0;i<=m+1;i++){
        a1[n+1][i]=-1;

a1[0][i]=-1;

    }

for(i=0;i<=n+1;i++)
    {a2[i][0]=-1;
   a2[i][m+1]=-1; }
    for(i=0;i<=m+1;i++){
        a2[n+1][i]=-1;

a2[0][i]=-1;

    }





}
  void prelucrez1(){
    int k;
    r.x=ir;
    r.y=jr;
    a1[ir][jr]=1;
    q.push(r);
    while(!q.empty()){
        e=q.front();
        q.pop();
        for(k=0;k<8;k++){
            r.x=e.x+dx[k];
            r.y=e.y+dy[k];
              if (a1[r.x][r.y] != -1 and (a1[r.x][r.y] ==0)) {
                    a1[r.x][r.y] = a1[e.x][e.y] + 1;
                    q.push(r);
        }




        }





    }



    }
    void prelucrez2(){
    int k;
    r.x=ij;
    r.y=jj;
    a2[ij][jj]=1;
    q.push(r);
    while(!q.empty()){
        e=q.front();
        q.pop();
        for(k=0;k<8;k++){
            r.x=e.x+dx[k];
            r.y=e.y+dy[k];
              if (a2[r.x][r.y] != -1 and (a2[r.x][r.y] ==0)) {
                    a2[r.x][r.y] = a2[e.x][e.y] + 1;
                    q.push(r);
        }




        }





    }



    }
int main(){
citire();
bordare();
prelucrez1();
prelucrez2();
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{if(a1[i][j]==a2[i][j] and a2[i][j]>0 and a2[i][j]<mini)
{mini=a2[i][j];
xm=i;ym=j;

}
}
fout<<mini<<" "<<xm<<" "<<ym;
}