Pagini recente » Cod sursa (job #2057763) | Cod sursa (job #2077658) | Cod sursa (job #90470) | Cod sursa (job #2623938) | Cod sursa (job #1650462)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,a[105][105],X2,Y2,X3,Y3,a2[105][105];
struct Cell
{
short int x,y;
};
void Bordare()
{
for(int i=0;i<=m+1;i++)
a[0][i]=a[n+1][i]=a2[0][i]=a2[n+1][i]=-1;
for(int i=0;i<=n+1;i++)
a[i][0]=a[i][m+1]=a2[i][0]=a2[i][m+1]=-1;
}
Cell Q[105*105];
void Read()
{
fin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
char c;
fin>>c;
if(c=='X')
{a[i][j]=-1; a2[i][j]=-1;}
if(c=='0')
a[i][j]=0;
if(c=='R')
{
a[i][j]=2;
X2=i;
Y2=j;
}
if(c=='J')
{a[i][j]=3;
X3=i;
Y3=j;
}
}
}
void Lee()
{
int i,j,k;
a[X2][Y2] = 1;
Q[1].x = X2; Q[1].y = Y2;
k = 1;
for(int l = 1; l<=k; l++)
{
i = Q[l].x; j = Q[l].y;
if(a[i-1][j] == 0)
{
a[i-1][j] = a[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j;
}
if(a[i+1][j] == 0)
{
a[i+1][j] = a[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j;
}
if(a[i][j+1] == 0)
{
a[i][j+1] = a[i][j] + 1;
k++;
Q[k].x = i;
Q[k].y = j+1;
}
if(a[i][j-1] == 0)
{
a[i][j-1] = a[i][j] + 1;
k++;
Q[k].x = i;
Q[k].y = j-1;
}
if(a[i-1][j-1] == 0)
{
a[i-1][j-1] = a[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j-1;
}
if(a[i+1][j+1] == 0)
{
a[i+1][j+1] = a[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j+1;
}
if(a[i-1][j+1] == 0)
{
a[i-1][j+1] = a[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j+1;
}
if(a[i+1][j-1] == 0)
{
a[i+1][j-1] = a[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j-1;
}
}
}
void Lee2()
{
int i,j,k;
a[X3][Y3] = 1;
Q[1].x = X2; Q[1].y = Y2;
k = 1;
for(int l = 1; l<=k; l++)
{
i = Q[l].x; j = Q[l].y;
if(a2[i-1][j] == 0)
{
a2[i-1][j] = a2[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j;
}
if(a2[i+1][j] == 0)
{
a2[i+1][j] = a2[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j;
}
if(a2[i][j+1] == 0)
{
a2[i][j+1] = a2[i][j] + 1;
k++;
Q[k].x = i;
Q[k].y = j+1;
}
if(a2[i][j-1] == 0)
{
a2[i][j-1] = a2[i][j] + 1;
k++;
Q[k].x = i;
Q[k].y = j-1;
}
if(a2[i-1][j-1] == 0)
{
a2[i-1][j-1] = a2[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j-1;
}
if(a2[i+1][j+1] == 0)
{
a2[i+1][j+1] = a2[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j+1;
}
if(a2[i-1][j+1] == 0)
{
a2[i-1][j+1] = a2[i][j] + 1;
k++;
Q[k].x = i-1;
Q[k].y = j+1;
}
if(a2[i+1][j-1] == 0)
{
a2[i+1][j-1] = a2[i][j] + 1;
k++;
Q[k].x = i+1;
Q[k].y = j-1;
}
}
}
void Print()
{
for(int i=0;i<=n+1;i++)
{
for(int j=0;j<=m+1;j++)
cout<<a[i][j]<<" ";
cout<<"\n";
}
}
int main()
{
Read();
Lee();
Lee2();
int i,j;
int minimum=10000,ind=0,col=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(a[i][j]!=0 && a[i][j]!=-1 && a[i][j]==a2[i][j] && minimum>a[i][j])
{
minimum=a[i][j];
ind=i;
col=j;
}
fout<<minimum<<" "<<ind<<" "<<col<<"\n";
}