Cod sursa(job #386303)

Utilizator monkTemian Vlad monk Data 24 ianuarie 2010 16:34:12
Problema Rj Scor 0
Compilator c Status done
Runda Arhiva de probleme Marime 3 kb
/*
       Nume:Temian Vlad
       Problema:
       Date:
*/
#include <stdio.h>
struct alee{
    short x,y;    
}coada[10004];
FILE *f,*o;
int a[102][102],sc,ic,b[100][100];
int main()
{
    f=fopen("rj.in","r");
    o=fopen("rj.out","w");
    int n,x,y,m,i,j,e,r1,r2;
    char linie[200];
    fscanf(f,"%d %d\n",&n,&m);
    a[0][0]=b[0][0]-1;
    for(i=1;i<=n;i++){
        fgets(linie,114,f);
        a[i][0]=b[i][0]=-1;
        a[i][n+1]=a[i][n+1]=-1;
        for(j=1;j<=m;j++){
            if(a[0][j]!=-1&&a[n+1][j]!=-1){a[0][j]=b[0][j]=-1;a[n+1][j]=b[n+1][j]=-1;}
            if(linie[j-1]=='X'){a[i][j]=b[i][j]=-1;}
            else
            if(linie[j-1]=='J'){
                a[i][j]=1;ic++;coada[ic].x=i;coada[ic].y=j;
            } 
            if(linie[j-1]=='R'){
                b[i][j]=1;r1=i;r2=j;    
            }   
            
        }
    }
    
    sc=ic;ic=1;
    while(ic<=sc){
        x=coada[ic].x;
        y=coada[ic].y;
        if(a[x][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y+1;a[x][y+1]=a[x][y]+1;}
        if(a[x][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y-1;a[x][y-1]=a[x][y]+1;}
        if(a[x+1][y]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y;a[x+1][y]=a[x][y]+1;}
        if(a[x-1][y]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y;a[x-1][y]=a[x][y]+1;}
        if(a[x+1][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y+1;a[x+1][y+1]=a[x][y]+1;}
        if(a[x-1][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y-1;a[x-1][y-1]=a[x][y]+1;}
        if(a[x+1][y-1]==0&&a[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y-1;a[x+1][y-1]=a[x][y]+1;}
        if(a[x-1][y+1]==0&&a[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y+1;a[x-1][y+1]=a[x][y]+1;}
        ic++;    
    }
    ic=sc=1;
    coada[ic].x=r1;
    coada[ic].y=r2;
    while(ic<=sc){
        x=coada[ic].x;
        y=coada[ic].y;
        if(b[x][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y+1;b[x][y+1]=b[x][y]+1;}       
        if(b[x][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x;coada[sc].y=y-1;b[x][y-1]=b[x][y]+1;}
        if(b[x+1][y]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y;b[x+1][y]=b[x][y]+1;}
        if(b[x-1][y]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y;b[x-1][y]=b[x][y]+1;}
        if(b[x+1][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y+1;b[x+1][y+1]=b[x][y]+1;}
        if(b[x-1][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y-1;b[x-1][y-1]=b[x][y]+1;}
        if(b[x+1][y-1]==0&&b[x][y]>0){sc++;coada[sc].x=x+1;coada[sc].y=y-1;b[x+1][y-1]=b[x][y]+1;}
        if(b[x-1][y+1]==0&&b[x][y]>0){sc++;coada[sc].x=x-1;coada[sc].y=y+1;b[x-1][y+1]=b[x][y]+1;}
        ic++;    
    }
    ic=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)
            if((a[i][j]!=-1&&a[i][j]!=0) && a[i][j]==b[i][j]){ic=1;fprintf(o,"%d %d %d",a[i][j],i,j);break;}
        if(ic)break;    
        }
            
    
    /*for(i=1;i<=n;i++){
        for(j=1;j<=m;j++)fprintf(o,"%d ",b[i][j]);fprintf(o,"\n");}*/
    return 0;
}