Pagini recente » Cod sursa (job #3208606) | Cod sursa (job #1073428) | Cod sursa (job #1061737) | Cod sursa (job #507929) | Cod sursa (job #1053418)
#include <fstream>
#include <string>
#include <queue>
#include <iostream>
using namespace std;
int a[100][100],n,m,rm[100][100],jl[100][100];
struct pct
{
int x,y;
};
pct rom,jul;
queue <pct> c;
const int dx[]={1,1,0,-1,-1,-1,0,1};
const int dy[]={0,-1,-1,-1,0,1,1,1};
void cit()
{
ifstream f;
string ln;
f.open("rj.in");
f>>n>>m;
getline(f,ln);
for (int i=1;i<=n;++i)
{
getline(f,ln);
for (int j=0;j<m;++j)
if (ln[j]=='X') a[i][j+1]=1;
else if (ln[j]==' ') a[i][j+1]=0;
else if(ln[j]=='R')
{
rom.x=i;
rom.y=j+1;
}
else if(ln[j]=='J')
{
jul.x=i;
jul.y=j+1;
}
}
}
void lee(int b[100][100],int x,int y)
{
pct p,p2;
p.x=x;
p.y=y;
c.push(p);
while (!c.empty())
{
p=c.front();
c.pop();
for (int i=0;i<8;i++)
{
if (p.x+dx[i]>0 && p.x+dx[i]<=n && p.y+dy[i]>0 && p.y+dy[i]<=m)
if (a[p.x+dx[i]][p.y+dy[i]]==0 && (p.x+dx[i]!=x || p.y+dy[i]!=y))
{
if (b[p.x+dx[i]][p.y+dy[i]]==0 || b[p.x+dx[i]][p.y+dy[i]]>1+b[p.x][p.y])
{
b[p.x+dx[i]][p.y+dy[i]]=1+b[p.x][p.y];
p2.x=p.x+dx[i];
p2.y=p.y+dy[i];
c.push(p2);
}
}
}
}
}
void rez()
{
pct p;
int min=10000;
for (int i=1;i<=n;++i)
for (int j=m;j>=1;--j)
{
if (rm[i][j]!=0 && rm[i][j]==jl[i][j]) if (rm[i][j]<min)
{
min=rm[i][j];
p.x=i;
p.y=j;
}
}
ofstream g;
g.open("rj.out");
g<<min+1<<" "<<p.x<<" "<<p.y;
g.close();
}
void afis(int a[100][100])
{
for (int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j)
cout<<a[i][j];
cout<<'\n';
}
}
int main()
{
cit();
lee(rm,rom.x,rom.y);
lee(jl,jul.x,jul.y);
rez();
return 0;
}