Pagini recente » Cod sursa (job #1404734) | Cod sursa (job #888990) | Cod sursa (job #122585) | Cod sursa (job #243605) | Cod sursa (job #1896840)
#include <iostream>
#include <fstream>
/// AM VERIFICAT-O PE INFOARENA SI PE CAMPIONI SI PRIMESC O EROARE LEGATA DE IESIREA DIN MEMORIE(KILLED BY SIGNAL 11) SI NU AM REUSIT SA GASESC PROBLEMA
struct punct{int x;int y;};
using namespace std;
void lee(long i,long j,long b[105][105])
{ punct C[11000];
long p,u,lin,col;
p=1;u=1;
C[p].x=i;
C[p].y=j;
b[i][j]=1;
///aplicam lee pentru toate directiile
while(p<=u){
//adaugam in coada vecinii lui
lin=C[p].x;
col=C[p].y;
if(b[lin-1][col]==0){
u++;
C[u].x=lin-1;
C[u].y=col;
b[lin-1][col]=b[lin][col]+1;
}
if(b[lin-1][col-1]==0){
u++;
C[u].x=lin-1;
C[u].y=col-1;
b[lin-1][col-1]=b[lin][col]+1;
}
if(b[lin][col+1]==0){
u++;
C[u].x=lin;
C[u].y=col+1;
b[lin][col+1]=b[lin][col]+1;
}
if(b[lin+1][col+1]==0){
u++;
C[u].x=lin+1;
C[u].y=col+1;
b[lin+1][col+1]=b[lin][col]+1;
}
if(b[lin+1][col]==0){
u++;
C[u].x=lin+1;
C[u].y=col;
b[lin+1][col]=b[lin][col]+1;
}
if(b[lin+1][col+1]==0){
u++;
C[u].x=lin+1;
C[u].y=col+1;
b[lin+1][col+1]=b[lin][col]+1;
}
if(b[lin][col-1]==0){
u++;
C[u].x=lin;
C[u].y=col-1;
b[lin][col-1]=b[lin][col]+1;
}
if(b[lin-1][col-1]==0){
u++;
C[u].x=lin-1;
C[u].y=col-1;
b[lin-1][col-1]=b[lin][col]+1;
}
p++;
}
}
int main()
{ char a[105][105];
long i,j,m,n,i2,j2,i3,j3,b[105][105]={-2},c[105][105]={-2};
punct coord[11000];
ifstream f("rj.in");
ofstream g("rj.out");
f>>n>>m;
i=0;
j=0;
f.get();
for(i=1;i<=n+1;i++){ /// nu se initializa b,c cu -2 in declarare asa ca am pus -2 aici
for(j=1;j<=m+1;j++){
f.get(a[i][j]);
b[i][j]=-2;
c[i][j]=-2;
}}
/* for(i=1;i<n+1;i++){
for(j=1;j<=m+1;j++){
cout<<a[i][j];
}
}
*/
for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
if(a[i][j]=='R'){ ///pun zero in locurile prin care se poate parcurge
i2=i;
j2=j;
b[i][j]=0;
c[i][j]=0;
}
if(a[i][j]=='J'){
i3=i;
j3=j;
b[i][j]=0;
c[i][j]=0;
}
if(a[i][j]==' '){
b[i][j]=0;
c[i][j]=0;
}
}
}
lee(i2,j2,b);
/*for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
cout<<b[i][j]<<" ";
}cout<<endl;
}*/
lee(i3,j3,c);
/*cout<<endl;
for(i=1;i<n+1;i++){
for(j=1;j<m+1;j++){
cout<<c[i][j]<<" ";
}cout<<endl;
}
*/
long tmin2,tmin[11000],k=0,min1=999,min2=999;
for(i=1;i<n+1;i++)
for(j=1;j<m+1;j++)
if(b[i][j]==c[i][j] && b[i][j]!=-2 && b[i][j]!=0){
k++;
tmin[k]=c[i][j];
coord[k].x=i;
coord[k].y=j;
}
if(k!=1){ ///in cazul in care am mai multe solutii,le ordonez in functie de minimul liniei ci coloanei
for(i=1;i<=k;i++)
if(coord[i].x<min1)
if(coord[i].y<min2){
tmin2=tmin[i];
min1=coord[i].x;
min2=coord[i].y;
}
g<<tmin2<<' '<<min1<<' '<<min2;
}else
g<<tmin[1]<<' '<<coord[1].x<<' '<<coord[1].y;
return 0;
}