Pagini recente » Cod sursa (job #2001024) | Cod sursa (job #2018424) | Istoria paginii runda/rar23/clasament | Istoria paginii runda/round1/clasament | Cod sursa (job #2029366)
#include <iostream>
#include <cstdio>
#include <queue>
#include <fstream>
using namespace std;
int n, m, a[177][177], ri, rj, ji, jj, juliet[177][177];
int pi, pj, pif, pjf;
int di[8]= {-1, 0, 0, 1, -1, -1, 1, 1};
int dj[8]= {0, -1, 1, 0, -1, 1, -1, 1};
queue< pair <int, int> >Q;
void Citire ()
{
//freopen ("rj.in","r",stdin);
ifstream fin("rj.in");
fin>>n>>m;
char loc;
for (int i=1; i<=n; i++)
for (int j=1; j<=m; j++)
{
//scanf ("%c",&loc);
fin.get(loc);
if (loc=='\n')
//scanf ("%c",&loc);
fin.get(loc);
if (loc=='X')
a[i][j]=-1;
else if (loc=='R')
{
ri=i;
rj=j;
}
else if (loc=='J')
{
ji=i;
jj=j;
}
//else if(loc=='v'){
// a[i][j]=0;
//}
}
}
int Lee (int a[177][177], int pi, int pj)
{
Q.push (make_pair(pi,pj));
a[pi][pj]=1;
while (!Q.empty())
{
int ic=Q.front().first;
int jc=Q.front().second;
Q.pop();
for (int i=0; i<8; i++)
{
int iv=ic+di[i];
int jv=jc+dj[i];
if (a[iv][jv]==0)
{
a[iv][jv]=1+a[ic][jc];
if (iv==pif && jv==pjf)
return a[iv][jv]-1;
Q.push(make_pair(iv,jv));
}
}
}
return -1;
}
void Bordare ()
{
for (int j=0; j<=m+1; j++)
{
a[0][j]=-1;
a[n+1][j]=-1;
}
for (int i=0; i<=n+1; i++)
{
a[i][0]=-1;
a[i][m+1]=-1;
}
}
int main()
{
//freopen ("rj.out","w",stdout);
ofstream fout("rj.out");
Citire();
Bordare();
for (int i=0; i<=n+1; i++)
for (int k=0; k<=m+1; k++)
juliet[i][k]=a[i][k];
Lee(a,ri,rj);
Lee(juliet,ji,jj);
int ok=1;
for (int i=1; i<=n && ok==1; i++)
{
for (int k=1; k<=m && ok==1; k++)
if (juliet[i][k]==a[i][k] && juliet[i][k]>0)
{
fout<<a[i][k]<<" "<<i<<" "<<k;
ok=0;
}
}
/*
cout<<endl;
for(int i=1; i<=n; i++){
for(int j=1; j<=m; j++){
fout<<juliet[i][j]<<" ";
}
fout<<endl;
}
fout<<endl;
*/
return 0;
}