Pagini recente » Cod sursa (job #781921) | Cod sursa (job #524946) | Cod sursa (job #374099) | Cod sursa (job #2696444) | Cod sursa (job #1147083)
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
short romeo[101][101];
short julieta[101][101];
int main()
{
struct poz
{ int l,c;};
poz coada[10201];
struct bla
{ int l1,c1;};
bla coada2[10201] ;
short dl[9],dc[9],n,m,x,y,u=0,p=0,r1,r2,j1,j2,i,j,x1,y1,ok=0;
char linia[101];
dl[1]=-1;dl[2]=0;dl[3]=1;dl[4]=0;dl[5]=-1;dl[6]=-1;dl[7]=1;dl[8]=1;
dc[1]=0;dc[2]=1;dc[3]=0;dc[4]=-1;dc[5]=-1;dc[6]=1;dc[7]=0-1;dc[8]=1;
ifstream f("rj.in");ofstream g("rj.out");
f>>n>>m;
f.get();
for(j=1;j<=n;j++)
{ f.getline(linia,101);
for(i=0;i<strlen(linia);i++)
{if(linia[i]=='R'){romeo[j][i+1]=1;r1=j;r2=i+1;}
if(linia[i]=='J'){romeo[j][i+1]=0;j1=j;j2=i+1;}
if(linia[i]=='X')romeo[j][i+1]=-1;
if(linia[i]==' ')romeo[j][i+1]=0;}
}
for(i=0;i<=n+1;i++) // bordare margini cu -1
{ romeo[0][i]=-1;romeo[n+1][i]=-1;
romeo[i][m+1]=-1;romeo[i][0]=-1;}
for(i=0;i<=n+1;i++)
for(j=0;j<=m+1;j++) julieta[i][j]=romeo[i][j];
coada[0].l=r1; // initializam primul elem din coada cu coordonatele lui romeo
coada[0].c=r2;
coada2[0].l1=j1; // initializam primul elem din coada cu coordonatele julietei
coada2[0].c1=j2;
while(p<=u && romeo[j1][j2]==0)
{ x=coada[p].l; y=coada[p].c;
p++;
for(i=1;i<=8;i++)
{
x1=x+dl[i]; y1=y+dc[i];
if(romeo[x1][y1]==0)
{ romeo[x1][y1]=romeo[x][y]+1;
u++;
coada[u].l=x1;
coada[u].c=y1;}
}
}
p=0;u=0;julieta[j1][j2]=1;julieta[r1][r2]=0;
while(p<=u && julieta[r1][r2]==0)
{ x=coada2[p].l1; y=coada2[p].c1;
p++;
for(i=1;i<=8;i++)
{
x1=x+dl[i]; y1=y+dc[i];
if(julieta[x1][y1]==0)
{ julieta[x1][y1]=julieta[x][y]+1;
u++;
coada2[u].l1=x1;
coada2[u].c1=y1;}
}
}
for(i=1;i<=n;i++)
for(j=1;j<=m && ok==0;j++)
if(romeo[i][j]==julieta[i][j] && romeo[i][j]>0)
{
ok=1;
g<<romeo[i][j]<<" "<<i<<" "<<j;
}
return 0;
}