Pagini recente » Monitorul de evaluare | Cod sursa (job #1911870) | Cod sursa (job #320114) | Cod sursa (job #164065) | Cod sursa (job #1860217)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
queue < pair < int, int > > R,J;
pair < int, int >r,julieta,rez;
int a[101][101],b[101][101],n,m,mn=999;
int dx[8]={1,1,1,-1,-1,-1,0,0};
int dy[8]={0,-1,1,0,-1,1,-1,1};
void citire()
{
int i,j;
char c;
f>>n>>m;
for(i=1;i<=n;i++)
{
if(c!='\n') f.get(c);
for(j=1;j<=m;j++)
{
f.get(c);
if(c=='X') b[i][j]=a[i][j]=-1;
if(c=='R') r=make_pair(i,j);
if(c=='J') julieta=make_pair(i,j);
}
}
}
int ok(int i,int j,int a[101][101])
{
if (i>=1 && i<=n && j>=1 && j<=m && a[i][j]==0)
return 1;
return 0;
}
void Lee()
{
int i,j,i_urm,j_urm,ok1=1;
R.push(make_pair(r.first,r.second)); //ROMEO
a[r.first][r.second]=1;
while (!R.empty() && ok1==1){
i=R.front().first;
j=R.front().second;
R.pop();
for (int directii=0;directii<8;directii++){
i_urm=i+dx[directii];
j_urm=j+dy[directii];
if (ok(i_urm,j_urm,a)){
a[i_urm][j_urm]=a[i][j]+1;
R.push(make_pair(i_urm,j_urm));
}
if (i_urm == julieta.first && j_urm==julieta.second)
ok1=0;
}
}
ok1=1;
J.push(make_pair(julieta.first,julieta.second)); //JULIETA
b[julieta.first][julieta.second]=1;
while (!J.empty()){
i=J.front().first;
j=J.front().second;
J.pop();
for (int directii=0;directii<8;directii++){
i_urm=i+dx[directii];
j_urm=j+dy[directii];
if (ok(i_urm,j_urm,b)){
b[i_urm][j_urm]=b[i][j]+1;
J.push(make_pair(i_urm,j_urm));
}
if (i_urm == r.first && j_urm==r.second)
ok1=0;
}
}
}
void parcurgere()
{
int i,j;
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
if (a[i][j]==b[i][j] && a[i][j]>0 && mn>a[i][j]){
mn=a[i][j];
rez=make_pair(i,j);
}
}
}
}
void afis()
{
g<<mn<<" "<<rez.first<<" "<<rez.second;
}
int main()
{
int i,j;
citire();
Lee();
parcurgere();
afis();
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
cout<<a[i][j]<<" ";
}
cout<<'\n';
}
cout<<endl;
for (i=1;i<=n;i++){
for (j=1;j<=m;j++){
cout<<b[i][j]<<" ";
}
cout<<'\n';
}
}