Cod sursa(job #831229)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 8 decembrie 2012 12:05:55
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
#include <stdio.h>
#include <limits.h>
#include <string.h>
#include <stdlib.h>
#define DIM 101
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
int N,M;
char A[DIM][DIM],B[DIM][DIM];
int DR[DIM][DIM],DJ[DIM][DIM];
int di[8]={-1,1,0,0,-1,1,1,-1};
int dj[8]={0,0,1,-1,-1,1,-1,1};
 
struct deplasare{
    int i;
    int j;
};
deplasare C[DIM*DIM];
 
void coada(char x,char y,int i,int j,char A[DIM][DIM],int DR[DIM][DIM]){
    int p=1,u=1;
    C[p].i=i;
    C[p].j=j;
    A[i][j]=y;
    while(p<=u){
        for(register int d=0;d<=7;d++){
            int iv=C[p].i+di[d];
            int jv=C[p].j+dj[d];
            if(A[iv][jv]==x){
                A[iv][jv]=y;
                C[++u].i=iv;
                C[u].j=jv;
                DR[iv][jv]=DR[C[p].i][C[p].j]+1;
            }
        }
        p++;
    }
}
 
int main(void){
    register int i,j;
 
    fscanf(f,"%d %d\n",&N,&M);
    for(i=1;i<=N;i++){
        fgets(A[i]+1,10001,f);
        for(j=strlen(A[i]+1)-1;j<=M;j++){
            if(A[i][j]!='X' && A[i][j]!='R' && A[i][j]!='J')
                A[i][j]=' ';
        }
        A[i][M+1]=0;
        strcpy(B[i]+1,A[i]+1);
    }
    for(i=1;i<=N;i++){
        for(j=1;j<=M;j++){
            if(A[i][j]=='R')
                coada(' ','.',i,j,A,DR);
            if(B[i][j]=='J')
                coada(' ','.',i,j,B,DJ);
        }
    }
 
    int Ci,Cj;
    int Min=INT_MAX;
    for(i=1;i<=N;i++){
        for(j=1;j<=M;j++){
            if(DR[i][j]>0 && DJ[i][j]==DR[i][j] && DR[i][j]<Min)
                Min=DR[i][j],Ci=i,Cj=j;
        }
    }
    fprintf(g,"%d %d %d",Min+1,Ci,Cj);
    fclose(f);
    fclose(g);
    return 0;
}