Pagini recente » Cod sursa (job #392176) | Cod sursa (job #1068679) | Cod sursa (job #1372515) | Atasamentele paginii Profil cristinevodar | Cod sursa (job #890917)
Cod sursa(job #890917)
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
const short int dx[]={1,0,-1,0,1,-1,-1,1};
const short int dy[]={0,1,0,-1,1,-1,1,-1};
short int mat1[100][100],mat2[100][100];
short int coada1[2][10000];
short int coada2[2][10000];
short int m,n;
ifstream in("RJ.in");
ofstream out("RJ.out");
void RJ(short int x1,short int y1,short int x2,short int y2)
{
short int i,top1,top2,k,j,tmin;
top1=1;top2=1;
coada1[0][0]=x1;coada1[1][0]=y1;
coada2[0][0]=x2;coada2[1][0]=y2;
for(i=0;i<top1;i++)
{
x1=coada1[0][i];
y1=coada1[1][i];
for(k=0;k<8;k++)
{
if(x1+dx[k]>=0 && y1+dy[k]>=0 && x1+dx[k]<n && y1+dy[k]<m && mat1[x1+dx[k]][y1+dy[k]]==0)
{coada1[0][top1]=x1+dx[k];
coada1[1][top1]=y1+dy[k];
mat1[x1+dx[k]][y1+dy[k]]=mat1[x1][y1]+1;
top1++;}
}
}
for(j=0;j<top2;j++)
{
x2=coada2[0][j];
y2=coada2[1][j];
for(k=0;k<8;k++)
{
if(x2+dx[k]>=0 && y2+dy[k]>=0 && x2+dx[k]<n && y2+dy[k]<m && mat2[x2+dx[k]][y2+dy[k]]==0)
{coada2[0][top2]=x2+dx[k];
coada2[1][top2]=y2+dy[k];
mat2[x2+dx[k]][y2+dy[k]]=mat2[x2][y2]+1;
top2++;}
}
}
tmin=100;
for(i=0;i<n;i++)
for(k=0;k<m;k++)
if(mat1[i][k]==mat2[i][k] && mat1[i][k]>0 && mat1[i][k]<tmin)
{tmin=mat1[i][k];
x1=i+1;y1=k+1;}
out<<tmin<<" "<<x1<<" "<<y1;
}
int main()
{
short int x1,y1,x2,y2,i,k;
string x;
in>>n>>m;
getline(in,x);
for(i=0;i<n;i++)
{
getline(in,x);
for(k=0;k<m;k++)
{
if(x[k]=='X') {mat1[i][k]=-1; mat2[i][k]=-1;}
else
if(x[k]=='R') {mat1[i][k]=1; x1=i; y1=k;}
else
if(x[k]=='J') {mat2[i][k]=1; x2=i; y2=k;}
}
}
RJ(x1,y1,x2,y2);
out.close();
in.close();
}