Pagini recente » Cod sursa (job #1352222) | Cod sursa (job #2399902) | Cod sursa (job #719292) | Cod sursa (job #2611194) | Cod sursa (job #2547156)
#include <iostream>
#include <fstream>
using namespace std;
struct point{
int lin;
int col;
};
int n,m;
int prim=0, ultim=0;
int prim2=0, ultim2=0;
int lenMax=n*m;
point coada[10001];
point p_inceput, p_final;
int dlin[4]={-1,0,1,0};
int dcol[4]={0,1,0,-1};
int v[101][101];
int v2[101][101];
bool check(int i, int j){
return i>=0&&j>=0&&i<n&&j<m;
}
void enque(point x){
coada[++ultim]=x;
};
point pop(){
point x=coada[prim++];
return x;
};
int main()
{
ifstream fin("rj.in");
ofstream fout("rj.out");
string line;
fin>>n>>m;
getline(fin,line);
point R, J;
for(int i=0; i<n; i++){
//string line;
getline(fin,line);
for(int j=0; j<m; j++){
char c = line[j];
if(c=='R'){
R.lin=i;
R.col=j;
v[i][j]=0;
v2[i][j]=0;
} else if(c=='J'){
J.lin=i;
J.col=j;
v[i][j]=0;
v2[i][j]=0;
} else if(c=='X'){
v[i][j]=-1;
v2[i][j]=-1;
} else if(c==' '){
v[i][j]=0;
v2[i][j]=0;
}
//fin>>v[i][j];
}
}
coada[0]=R;
v[R.lin][R.col]=1;
while(prim<=ultim){
point p=coada[prim++];
for(int k=0; k<4; k++){
point vecin;
vecin.lin=p.lin+dlin[k];
vecin.col=p.col+dcol[k];
if(check(vecin.lin, vecin.col)&&v[vecin.lin][vecin.col]==0){
v[vecin.lin][vecin.col]=v[p.lin][p.col]+1;
//enque(vecin);
coada[++ultim]=vecin;
}
}
}
//prim=0, ultim=0;
coada[0]=J;
v2[J.lin][J.col]=1;
while(prim2<=ultim2){
point p=coada[prim2++];
for(int k=0; k<4; k++){
point vecin;
vecin.lin=p.lin+dlin[k];
vecin.col=p.col+dcol[k];
if(check(vecin.lin, vecin.col)&&v2[vecin.lin][vecin.col]==0){
v2[vecin.lin][vecin.col]=v2[p.lin][p.col]+1;
//enque(vecin);
coada[++ultim2]=vecin;
}
}
}
//printArr1();
//cout<<endl<<endl;
//printArr2();
point minim;
int minimPasi=1000000;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(v[i][j]==v2[i][j]&&v[i][j]>0&&v[i][j]<minimPasi){
//fout<<v[i][j]-1<<' '<<i+1<<' '<<j+1;
minimPasi=v[i][j];
minim.lin=i+1;
minim.col=j+1;
}
}
}
fout<<minimPasi-1<<' '<<minim.lin<<' '<<minim.col;
return 0;
}