Cod sursa(job #795916)

Utilizator cristitamasTamas Cristian cristitamas Data 9 octombrie 2012 21:07:01
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.72 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream fout("rj.out");
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 a;
    f>>n>>m;
    f.get(a);
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            f.get(a);
            switch(a){
                case 'R':{
                    ri=i;
                    rj=j;
                    break;
                }
                case 'J':{
                    ji=i;
                    jj=j;
                    break;
                }
                case 'X':{
                    matricer[i][j]=-1;
                    matricej[i][j]=-1;
                    break;
                }
            }
        }
        f.get(a);
    }


}


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=10000000;
    int coloana=10000000;
    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;
                    }
fout<<minim<<" "<<linie<<" "<<coloana;

}


/*void afisare(int x[][105]){
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++)
            fout<<x[i][j]<<" ";
        fout<<"\n";
    }
    fout<<"\n\n";
}*/

int main()
{
    citire();
    bordare();
    algoritm(matricer,ri,rj);
    //afisare(matricer);
    algoritm(matricej,ji,jj);
    //afisare(matricej);
    drum();
    return 0;
}