Pagini recente » Cod sursa (job #1734070) | Cod sursa (job #1270791) | Cod sursa (job #1435985) | Cod sursa (job #1461372) | Cod sursa (job #1896976)
#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(int i,int j,int b[105][105])
{ punct C[1000];
int 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];
int i,j,m,n,i2,j2,i3,j3,b[105][105]={-2},c[105][105]={-2};
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;
}
*/
int tmin=999,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++;
if(c[i][j]<tmin)
tmin=c[i][j];
if(i<min1)
min1=i;
if(j<min2)
min2=j;
}
///in cazul in care am mai multe solutii,le ordonez in functie de minimul liniei ci coloanei
g<<tmin<<' '<<min1<<' '<<min2;
return 0;
}