Pagini recente » Cod sursa (job #1646413) | Cod sursa (job #1870417) | Cod sursa (job #1049639) | Cod sursa (job #1663121) | Cod sursa (job #1632099)
#include <iostream>
#include <fstream>
using namespace std;
#define DimMax 20
#define DimMaxCoada 400
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
struct Element
{
int l,c;
unsigned d;
};
Element C[DimMaxCoada], x, y;
int A[DimMax][DimMax], n,m,x0,y0,i,j,k,IncC,SfC,dist,sw=0;
char s[101];
void citire()
{
fin>>n>>m;
fin.getline(s,101);
for (i=1;i<=n;i++)
{
fin.getline(s,101);
for (j=0;j<m;j++)
{
if (s[j]=='J')
{
A[i][j+1]=-1;
}
else if (s[j]=='R')
{
x0=i;
y0=j+1;
A[i][j+1]=-1;
}
else if (s[j]=='X') A[i][j+1]=-2;
else A[i][j+1]=0;
}
}
}
void bordare()
{
for(i=0;i<=n;i++)
A[i][0]=A[i][m+1]=-2;
for(i=0;i<=m;i++)
A[0][i]=A[n+1][i]=-2;
}
void initializareCoada()
{
x.l=x0;
x.c=y0;
x.d=0;
A[x0][y0]=0;
C[IncC]=x;
}
void LEE()
{
while(IncC<=SfC) //parcurgem
{
x=C[IncC++];
for(k=0;k<4;k++)
{
y.l=x.l+dx[k];
y.c=x.c+dy[k];
if(A[y.l][y.c]==0) //poz libera
{
y.d=x.d+1;
A[y.l][y.c]=y.d;
C[++SfC]=y; //duc y in C
}
else if(A[y.l][y.c]==-1) //poz libera
{
y.d=x.d+1;
A[y.l][y.c]=y.d;
C[++SfC]=y; //duc y in C
dist=y.d/2;
}
}
}
for (i=1; i<=n; i++)
{
for (j=1; j<=m; j++)
cout<<A[i][j]<<" ";
cout<<"\n";
}
}
void afisare()
{
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
if (A[i][j]==dist && sw==0)
{
fout<<dist<<" "<<i<<" "<<j;
sw=1;
break;
}
}
int main()
{
citire();
bordare();
initializareCoada();
LEE();
afisare();
return 0;
}