Pagini recente » Cod sursa (job #3041873) | Cod sursa (job #895884) | Cod sursa (job #673848) | Cod sursa (job #2193193) | Cod sursa (job #271676)
Cod sursa(job #271676)
#include <fstream.h>
#include <string.h>
#define max 102
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,tr[max][max],tj[max][max];
char t[max][max];
struct poz{int x,y;} r,ju;
int x[9]={0,1,1,1,0,0,-1,-1,-1};
int y[9]={0,-1,0,1,-1,1,-1,0,1};
void citire(){
int i,j;
char x;
in>>n>>m;
in.get();
for(i=1;i<=n;++i){
in.getline(t[i],101);
for(j=1;j<=m;++j){
if(t[i][j-1] == 'X') tr[i][j] = tj[i][j] = -1;
if(t[i][j-1] == 'R'){r.x = i;r.y=j;}
if(t[i][j-1] == 'J'){ju.x = i;ju.y=j;}
}
}
}
void bordare(){
int i,j;
for(j=0;j<=n+1;++j)
tr[n+1][j] = tr[0][j] = tj[n+1][j] = tj[0][j] = -1;
for(i=0;i<=n+1;++i)
tr[i][n+1] = tr[i][0] = tj[i][n+1] = tj[i][0] = -1;
}
void traseu_r(){
int i,j,k,l;
tr[r.x][r.y] = 1;
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(tr[i][j] != 0 && tr[i][j] != -1)
for(l=1;l<=8;++l)
if(tr[i+x[l]][j+y[l]] != -1)
if(tr[i+x[l]][j+y[l]] > tr[i][j]+1 || tr[i+x[l]][j+y[l]] == 0)
tr[i+x[l]][j+y[l]] = tr[i][j]+1;
}
void traseu_j(){
int i,j,k,l;
tj[ju.x][ju.y] = 1;
for(k=1;k<=n;++k)
for(i=1;i<=n;++i)
for(j=1;j<=n;++j)
if(tj[i][j] != 0 && tj[i][j] != -1)
for(l=1;l<=8;++l)
if(tj[i+x[l]][j+y[l]] != -1)
if(tj[i+x[l]][j+y[l]] > tj[i][j]+1 || tj[i+x[l]][j+y[l]] == 0)
tj[i+x[l]][j+y[l]] = tj[i][j]+1;
}
void afisare(){
int i,j,ok=0;
for(i=1;i<=n && !ok;++i){
for(j=1;j<=n && !ok;++j)
if(tr[i][j] == tj[i][j] && tr[i][j]!=-1 && tr[i][j] !=0){
ok=1;
out<<tr[i][j]<<" "<<i<<" "<<j;
}
}
}
int main(){
citire();
bordare();
traseu_r();
traseu_j();
afisare();
return 0;
}