Cod sursa(job #828582)

Utilizator alexamiu2008Miu Alexandra alexamiu2008 Data 3 decembrie 2012 22:46:20
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.1 kb
#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;
}