Pagini recente » Scrie articole | Cod sursa (job #893577) | Cod sursa (job #3291197) | Cod sursa (job #2245616) | Cod sursa (job #828582)
Cod sursa(job #828582)
#include <stdio.h>
int a[101][101],n,m;
int min=100001;
int b[101][101];
int jul[101][101];
int rom[101][101];
FILE*fin,*fout;
struct casute{
int x,y;
}c[10001];
char ch;
struct rj{
int x,y;
}r,ju,loc;
int dx[12]={0,-1,-1,-1,0,+1,+1,+1,0};
int dy[12]={0,-1,0,+1,+1,+1,0,-1,-1};
void citire(){
fscanf(fin,"%d %d\n",&n,&m);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
fscanf(fin,"%c",&ch);
if(ch=='X'){a[i][j]=-100;}
else if (ch==' '){a[i][j]=0;}
else if (ch=='J'){a[i][j]=-1;ju.x=i;ju.y=j;}
else if (ch=='R'){a[i][j]=-2;r.x=i;r.y=j;}
}
fscanf(fin,"\n");
}
fclose(fin);
}
void drum(int x1,int x2 ){
int p, u;
p=u=1;
c[1].x=x1;
c[1].y=x2;
b[x1][x2]=1;
int a1,b1;
while(p<=u){
for(int i=1;i<=8;i++){
a1=c[p].x+dx[i];
b1=c[p].y+dy[i];
if(a1>0 && a1<=n && b1>0 && b1<=m){
if(a[a1][b1]==0&& b[a1][b1]==0 ){
b[a1][b1]=b[c[p].x][c[p].y]+1;
u++;
c[u].x=a1;
c[u].y=b1;
}
// else if (b[a1][b1]>0 &&a[a1][b1]==0 ){
// if (b[a1][b1]>b[c[p].x][c[p].y]+1){b[a1][b1]=b[c[p].x][c[p].y]+1;}
// }
}
}
p++;
}
/*if(b[r.x][r.y]==b[ju.x][ju.y] && b[r.x][r.y]!=0){
if (b[r.x][r.y]<min ){min=b[r.x][r.y];
loc.x=l[lib].x;
loc.y=l[lib].y;}
}*/
}
void sterge(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
b[i][j]=0;
}
}
}
void copiaza(){
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
rom[i][j]=b[i][j];
}
}
}
int main()
{
fin=fopen("rj.in","r");
fout=fopen("rj.out","w");
citire();
drum(r.x, r.y);
copiaza ();
sterge();
drum(ju.x, ju.y);
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(rom[i][j]==b[i][j]&& rom[i][j]!=0){
if (rom[i][j]+1<min && a[i][j]==0 ){
min=rom[i][j]+1;
loc.x=i; loc.y=j;
}
}
}
}
fprintf(fout,"%d %d %d",loc.x,loc.y,min);
return 0;
}