Pagini recente » oji-10-2 | Cod sursa (job #2214646) | Cod sursa (job #2492374) | Cod sursa (job #1175480) | Cod sursa (job #1671443)
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
struct pereche{int lin, col;} cr[10000], cj[10000], z;
int dl[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dc[8]={1, 0, -1, 0, -1, 1, 1, -1};
int rom[101][101], jul[101][101];
char c[101];
int n, m, minim=10000000, prim, ultim, ln, cn, p1, p2, i, j;
int main()
{ifstream fin("rj.in");
ofstream gout("rj.out");
fin>>n>>m;
fin.get();
for(i=1; i<=n; ++i)
{ fin.getline(c,100);
for(j=0; j<=m-1; ++j)
{if(c[j]=='X') {rom[i][j+1]=-1; jul[i][j+1]=-1;}
else if(c[j]==' ') {rom[i][j+1]=0; jul[i][j+1]=0;}
else if(c[j]=='R') {rom[i][j+1]=1; jul[i][j+1]=0; cr[1].lin=i; cr[1].col=j+1;}
else {rom[i][j+1]=0; jul[i][j+1]=1; cj[1].lin=i; cj[1].col=j+1;}
}
}
for(i=0; i<=m+1; ++i)
rom[0][i]=rom[n+1][i]=jul[0][i]=jul[n+1][i]=-1;
for(i=0; i<=n+1; ++i)
rom[i][0]=rom[i][m+1]=jul[i][0]=jul[i][m+1]=-1;
prim=ultim=1;
while(prim<=ultim)
{ z=cr[prim];
for(i=0; i<=7; ++i)
{ ln=z.lin+dl[i];
cn=z.col+dc[i];
if(rom[ln][cn]==0)
{ ++ultim;
cr[ultim].lin=ln;
cr[ultim].col=cn;
rom[ln][cn]=rom[z.lin][z.col]+1;
}
}
prim++;
}
prim=ultim=1;
while(prim<=ultim)
{ z=cj[prim];
for(i=0; i<=7; ++i)
{ ln=z.lin+dl[i];
cn=z.col+dc[i];
if(jul[ln][cn]==0)
{ ++ultim;
cj[ultim].lin=ln;
cj[ultim].col=cn;
jul[ln][cn]=jul[z.lin][z.col]+1;
}
}
prim++;
}
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
{ if(rom[i][j]==jul[i][j] && rom[i][j]>1)
if(rom[i][j]<minim)
{minim=rom[i][j];
p1=i;
p2=j;
}
}
gout<<minim<<" "<<p1<<" "<<p2;
return 0;
}