Pagini recente » Cod sursa (job #845111) | Cod sursa (job #1779018) | Cod sursa (job #579332) | Cod sursa (job #1657542) | Cod sursa (job #1512501)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
queue < pair < int,int > > coada ;
int di[]={-1,0,1,0,-1,1,1,-1},dj[]={0,1,0,-1,1,1,-1,-1},i,j,i1,J,starti,startj,stopi,stopj,n,m,a[101][101],directie,b[101][101],Min=9999999;
char x,sir[101];
bool bun (int i,int j)
{
if(i<1||j<1||i>n||j>m)
return false;
if(a[i][j]==-1)
return false;
return true;
}
void afisare()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
}
void lee()
{
a[starti][startj]=1;
coada.push(make_pair(starti,startj));
while (!coada.empty())
{
i=coada.front().first;
j=coada.front().second;
coada.pop();
for(directie=0;directie<8;directie++)
{
i1=i+di[directie];
J=j+dj[directie];
if(bun(i1,J)&&a[i1][J]<1)
{
coada.push(make_pair(i1,J));
a[i1][J]=a[i][j]+1;
}
}
}
}
void citire()
{
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{
f.get(sir,101);
for(j=0;j<m;j++)
{
x=sir[j];
if(x=='X')
a[i][j+1]=-1;
if(x=='R')
{
starti=i;
startj=j+1;
}
if(x=='J')
{
stopi=i;
stopj=j+1;
}
}
f.get();
}
}
void copiereb()
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
b[i][j]=a[i][j];
}
void copierea()
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
swap(a[i][j],b[i][j]);
swap(starti,stopi);
swap(startj,stopj);
}
void compara()
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(a[i][j]>0&&b[i][j]>0)
{
if(a[i][j]==b[i][j])
{
if(Min>a[i][j])
{
Min=a[i][j];
stopi=i;
stopj=j;
}
}
}
}
}
int main()
{
citire();
copiereb();
lee();
copierea();
lee();
compara();
g<<Min<<" "<<stopi<<" "<<stopj;
return 0;
}