Cod sursa(job #766616)

Utilizator cristitamasTamas Cristian cristitamas Data 11 iulie 2012 18:14:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <cstdio>
using namespace std;

int n,m;
int matricer[105][105],matricej[105][105];
int di[8]={-1,-1,-1,0,+1,+1,+1,0};
int dj[8]={-1,0,+1,+1,+1,0,-1,-1};
int ri,rj,ji,jj;

struct coada{
    int i,j;
}c[100*100+20];



void citire(){
    char x;
    scanf("%d %d",&n,&m);
    scanf("\n");
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            scanf("%c",&x);
            if(x=='X'){
            matricer[i][j]=-1;
            matricej[i][j]=-1;
            }
            else if(x=='R'){
                    ri=i;
                    rj=j;
                 }
                 else if(x=='J'){
                        ji=i;
                        jj=j;
                      }
        }
        scanf("\n");
    }
}

void bordare(){
    int i,j;
    for(j=0;j<m+1;j++){
        matricer[0][j]=-1;
        matricer[n+1][j]=-1;
        matricej[0][j]=-1;
        matricej[n+1][j]=-1;
    }
    for(i=0;i<n+1;i++){
        matricer[i][0]=-1;
        matricer[i][m+1]=-1;
        matricej[i][0]=-1;
        matricej[i][m+1]=-1;
    }
}

void algoritm(int x[][105],int z,int t){
    int u=1;
    c[0].i=z;
    c[0].j=t;
    x[z][t]=1;
    for(int p=0;p<u;p++){
        int ic=c[p].i;
        int jc=c[p].j;
        for(int v=0;v<8;v++){
            int i2=ic+di[v];
            int j2=jc+dj[v];
            if(x[i2][j2]==0){
                x[i2][j2]=x[ic][jc]+1;
                c[u].i=i2;
                c[u].j=j2;
                u++;
            }
        }
    }
}



void drum(){
    int minim=100000000;
    int coloana=100000000;
    int linie=0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            if(matricer[i][j]==matricej[i][j] && matricer[i][j]!=-1 && matricer[i][j]!=0)
                if(matricer[i][j]<minim){
                    minim=matricer[i][j];
                    coloana=j;
                    linie=i;
                }
                else if(matricer[i][j]==minim)
                        if(i<coloana){
                            minim=matricer[i][j];
                            coloana=j;
                            linie=i;
                        }
    printf("%d %d %d",minim,linie,coloana);
}

void afisare(int x[][105]){
    for(int i=0;i<=n+1;i++){
        for(int j=0;j<=m+1;j++)
            printf("%d ",x[i][j]);
        printf("\n");
        }
    printf("\n");
}

int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    citire();
    bordare();
    algoritm(matricer,ri,rj);
    algoritm(matricej,ji,jj);
    drum();
    return 0;
}