Pagini recente » Cod sursa (job #1848445) | Cod sursa (job #483792) | Cod sursa (job #1312247) | Cod sursa (job #808570) | Cod sursa (job #876852)
Cod sursa(job #876852)
#include <fstream>
#include <limits.h>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
int n, m, q[3][10010], i, j, l[105][105],b[105][105], k, u, p, mini=INT_MAX;
char c , a[105];
void init()
{
cin>>n>>m;
cin.getline(a, 100);
for(i=1;i<=n;i++){
cin.getline(a, 100);
for(j=0;j<m;j++)
{
c=a[j];
if(c=='R')
{
k=1;
l[i][j+1]=0; //pornesc de la romeo
q[1][k]=i;
q[2][k]=j+1;
}
else if(c=='X') //poarta inchisa
{
l[i][j+1]=-2;
b[i][j+1]=-2; //-2
}
else if(c=='J')
{
l[i][j+1]=0;
b[i][j+1]=-3;
}
else if(c==' ')
{
l[i][j+1]=-1;
b[i][j]=0;
}
}
}
}
void intr(int c, int d)
{
u=u+1;
q[1][u]=c;
q[2][u]=d;
}
void extr(int &c, int &d)
{
p=p+1;
c=q[1][p];
d=q[2][p];
}
void lee()
{
int x, y;
u=1;
p=0;
while(p!=u)
{
extr(x, y);
if(x>1)
if(b[x-1][y]==0)
if(l[x-1][y]>l[x][y]+1 || l[x-1][y]==-1)
{
l[x-1][y]=l[x][y]+1;
intr(x-1, y);
}
if(x<n)
if(b[x+1][y]==0)
if(l[x+1][y]>l[x][y]+1 || l[x+1][y]==-1)
{
l[x+1][y]=l[x][y]+1;
intr(x+1, y);
}
if(y<m)
if(b[x][y+1]==0)
if(l[x][y+1]>l[x][y]+1 || l[x][y+1]==-1)
{
l[x][y+1]=l[x][y]+1;
intr(x, y+1);
}
if(y>1)
if(b[x][y-1]==0)
if(l[x][y-1]>l[x][y]+1 || l[x][y-1]==-1)
{
l[x][y-1]=l[x][y]+1;
intr(x, y-1);
}
}
mini=min(l[q[1][x]][q[1][y]], mini);
}
int main()
{
init();
// cout<<q[1][1]<<" "<<q[2][1];
lee();
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
cout<<l[i][j]<<" ";
cout<<"\n";}
cout<<mini;
return 0;
}