Pagini recente » Cod sursa (job #2296395) | Cod sursa (job #2133724) | Cod sursa (job #332613) | Cod sursa (job #2423514) | Cod sursa (job #2333876)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int matrix1[105][105];
int matrix2[105][105];
int matrix3[105][105];
int n,m,i,j;
int startxj,startyj,startxr,startyr;
struct axis
{
int x,y;
};
axis lg;
queue <axis> coada;
int dx[8]={1,0,-1,0,1,-1,1,-1};
int dy[8]={0,1,0,-1,1,-1,-1,1};
void Citire()
{
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
char c;
c=fin.get();
if(c=='\n')
{
j--;
continue;
}
if(c==' ')
matrix1[i][j]=matrix2[i][j]=matrix3[i][j]=0;
if(c=='X')
matrix1[i][j]=matrix2[i][j]=matrix3[i][j]=-1;
if(c=='R' || c=='J')
{
matrix1[i][j]=matrix2[i][j]=matrix3[i][j]=1;
if(c=='R')
startxr=i,startyr=j;
if(c=='J')
startyj=j,startxj=i;
}
}
}
bool conditie(int x,int y)
{
if(matrix1[x][y]!=0 || matrix2[x][y]!=0)
return 0;
if(x<1 || x>n || y<1 || y>m)
return 0;
return 1;
}
bool conditie1(int x,int y)
{
if(matrix1[x][y]==-1 || matrix3[x][y]!=0)
return 0;
if(x<1 || x>n || y<1 || y>m)
return 0;
return 1;
}
void Romeo(int startxr,int startyr)
{
lg.x=startxr;
lg.y=startyr;
coada.push(lg);
while(!coada.empty())
{
int cx=coada.front().x;
int cy=coada.front().y;
coada.pop();
for(i=0;i<8;i++)
{
int nx=cx+dx[i];
int ny=cy+dy[i];
if(conditie(nx,ny))
{
matrix2[nx][ny]=matrix2[cx][cy]+1;
lg.x=nx;
lg.y=ny;
coada.push(lg);
}
}
matrix1[cx][cy]=-2;
}
}
int Julieta(int startxj,int startyj)
{
int lin,col=m+5,val;
int ok=0;
lg.x=startxj;
lg.y=startyj;
coada.push(lg);
matrix3[startxj][startyj]=1;
while(!coada.empty())
{
int cx=coada.front().x;
int cy=coada.front().y;
coada.pop();
for(i=0;i<8;i++)
{
int nx=cx+dx[i];
int ny=cy+dy[i];
if(conditie1(nx,ny))
{
if(matrix2[nx][ny]==matrix3[cx][cy]+1)
{
ok=1;
if(ny<col)
col=ny;
val=matrix2[nx][ny];
lin=nx;
}
else
{
matrix3[nx][ny]=matrix3[cx][cy]+1;
}
lg.x=nx;
lg.y=ny;
coada.push(lg);
}
}
if(ok==1)
{
fout<<val<<" "<<lin<<" "<<col<<"\n";
return 0;
}
matrix1[cx][cy]=-1;
}
return 0;
}
void Afisare()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
fout<<matrix2[i][j]<<" ";
fout<<"\n";
}
}
int main()
{
Citire();
//Afisare();
Romeo(startxr,startyr);
while(!coada.empty())
coada.pop();
Julieta(startxj,startyj);
return 0;
}