Pagini recente » Cod sursa (job #1660125) | Cod sursa (job #2306848) | Cod sursa (job #302424) | Cod sursa (job #1403536) | Cod sursa (job #936862)
Cod sursa(job #936862)
#include <fstream>
#include <queue>
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()
{
int i,j;
char c;
ifstream f;
f.open("rj.in");
f>>n>>m;
f.get();
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
f.get(c);
switch (c)
{
case ' ': a[i][j]=0;
break;
case 'X': a[i][j]=-1;
break;
case 'R': a[i][j]=0;
rom.x=i;
rom.y=j;
break;
case 'J': a[i][j]=0;
jul.x=i;
jul.y=j;
break;
}
}
f.get();
}
f.close();
}
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]<n)
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=0;i<n;i++)
for (int j=0;j<m;j++)
{
if (rm[i][j]!=0 && rm[i][j]==jl[i][j]) if (rm[i][j]<min)
{
min=rm[i][j];
p.x=i+1;
p.y=j+1;
}
}
ofstream g;
g.open("rj.out");
g<<min+1<<" "<<p.x<<" "<<p.y;
g.close();
}
int main()
{
cit();
lee(rm,rom.x,rom.y);
lee(jl,jul.x,jul.y);
rez();
return 0;
}