Pagini recente » Cod sursa (job #671198) | Cod sursa (job #2109917) | Cod sursa (job #2932047) | Cod sursa (job #149538) | Cod sursa (job #1587926)
#include <fstream>
#include <queue>
using namespace std;
int n,m, xr, yr, xj, yj, i, j;
char a[105][105];
int J[105][105], R[105][105];
short dx[]={0, 0,-1, 1};
short dy[]={1, -1, 0, 0};
void Citire()
{
ifstream fin ("rj.in");
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{fin>>a[i][j];
if(a[i][j]=='R') {xr=i; yr=j;}
else if(a[i][j]=='J') {xj=i; yj=j;}
}
fin.close();
}
struct coada
{
short x, y;
};
queue<coada> q;
void Bordare()
{
for(i=1;i<=n;i++)
a[i][0]=a[i][m+1]='X';
for(i=1;i<=m;i++)
a[0][i]=a[n+1][i]='X';
for (i = 1; i <= n; ++i)
for (j = 1; j <= n; ++j)
{J[i][j] = 30001;
R[i][j]=30001;
}
}
void Lee(int xs,int ys, int d[105][105])
{
coada w,v;
w.x=xs;
w.y=ys;
q.push(w);
d[xs][ys]=1;
while(!q.empty())
{
w=q.front();
q.pop();
for(int k=0;k<4;k++)
{
v.x=w.x+dx[k];
v.y=w.y+dy[k];
if(a[v.x][v.y]!='X'&& d[w.x][w.y] > d[v.x][v.y] + 1 )
{
d[w.x][w.y] = d[v.x][v.y] + 1;
q.push(v);
}
}
}
}
int main()
{
int minim=10000 , xf , yf ;
Citire();
Lee(xr , yr , R);
Lee(xj , yj , J);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
if (R[i][j]==J[i][j] && R[i][j]<minim) {xf=i;yf=j;minim=R[i][j];}
}
ofstream fout ("rj.out");
fout << minim << " " << xf << " " << yf << "\n" ;
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
fout << R[i][j] << " " ;
fout << endl ;
}
for (i = 1; i <= n; ++i)
{
for (j = 1; j <= n; ++j)
fout << J[i][j] << " " ;
fout << endl ;
}
return 0;
}