Cod sursa(job #801156)

Utilizator titusuTitus C titusu Data 23 octombrie 2012 16:50:39
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
#include <iostream>
#include <climits>

using namespace std;

ifstream fin ("rj.in");
ofstream fout("rj.out");

int n,m,a[101][101],b[101][101];
int ir,jr,ij,jj;

const int di[8]={1,1,1,0,0,-1,-1,-1},
          dj[8]={1,0,-1,1,-1,1,0,-1};

void citire(){
    fin >> n >> m;
    fin.get();
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            char c;
            c = fin.get();
            if(c=='X')
                b[i][j]=a[i][j]=-1;
            if(c=='R')
                ir = i, jr = j;
            if(c=='J')
                ij = i, jj = j;
        }
        fin.get();
    }
    /*
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j)
            cout << -a[i][j] << " ";
        cout << endl;
    }
    */

}

void Lee(int a[101][101], int ii,int ji){
    unsigned char l[10005],c[10005];
    int st=1, dr=0;
    a[ii][ji] = 1;
    dr ++;
    l[dr] = ii, c[dr] = ji;
    while(st<=dr){
        int i = l[st], j=c[st];
        for(int k=0; k<8 ; ++k){
            int i1,j1;
            i1 = i+di[k], j1=j+dj[k];
            if(i1>0 && i1<n+1 && j1>0 && j1<m+1 && a[i1][j1]==0){
                a[i1][j1]=a[i][j]+1;
                dr++;
                l[dr]=i1, c[dr]=j1;
            }
        }
        st++;
    }
}

int main(){
    citire();
    Lee(a,ir,jr);
    Lee(b,ij,jj);
    int vmin = INT_MAX;
    int ii = 0, jj = 0;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;++j)
            if(a[i][j] == b[i][j] && a[i][j]>0)
                if(vmin > a[i][j])
                    vmin = a[i][j], ii = i, jj = j;
    
    for(int i=1;i<=n && !ii;++i)
        for(int j=1; j<=m && !jj; ++j)
            if(a[i][j]==vmin)
                ;
    fout << vmin << " " << ii << " " << jj << "\n";
    return 0;
}