Cod sursa(job #2064384)

Utilizator andrada2504Andrada Cojocaru andrada2504 Data 12 noiembrie 2017 11:50:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.31 kb
#include <iostream>
#include <fstream>
#include <string.h>

using namespace std;

ofstream fout("rj.out");


int verif(int i,int j,int d[101][101], int n, int m)
{
    if(d[i][j]==0 && i>=1 && i<=n && j>=1 && j<=m)
        return 1;
    return 0;
}

struct pozitie
{
    int lin, col;
};

void cautare(int t,int &i,int &j,int d[101][101], int &ok)
{
    if(t==1) {
        fout << i << ' ' << j;
        ok = 0;
        return;
    }

    int ui, uj, k;
    int dlin[]= {-1,-1,0,1,1,1,0,-1};
    int dcol[]=  {0,1,1,1,0,-1,-1,-1};

    for (k = 0; k < 8 && ok; k++) {
        ui = i + dlin[k];
        uj = j + dcol[k];
        if (d[ui][uj] == d[i][j] + 1) {
            cautare(t-1, ui, uj, d, ok);
        }
    }
}

int main()
{
    ifstream fin("rj.in");

    int dlin[]= {-1,-1,0,1,1,1,0,-1};
    int dcol[]=  {0,1,1,1,0,-1,-1,-1};

    int n,m,i,d[101][101]={0},l=0,ci,cj, ui, uj, j, ok = 1, jlin, jcol,t;
    pozitie v[1001];
    char nr, s[101];


    fin>>n>>m;
    fin.getline(s, 101);
    for(i=1;i<=n;i++) {
        fin.getline(s, 101);
        for(j=1;j<=m;j++)
        {
            nr = s[j-1];
            if(nr=='R')
                {

                    d[i][j]=1;
                    v[l].lin=i;
                    v[l].col=j;
                    l++;
                }
            else if(nr=='X')
                d[i][j]=-2;
            else if (nr == 'J') {
                jlin = i;
                jcol = j;
            }
        }
    }
      for(i=0;i<l && ok;i++)
      {
          ci=v[i].lin;
          cj=v[i].col;

          ok = 1;
          for (j = 0; j < 8 && ok; j++) {
            ui = ci + dlin[j];
            uj = cj + dcol[j];
            if (verif(ui, uj, d, n, m))
            {
                v[l].lin = ui;
                v[l++].col = uj;
                d[ui][uj] = d[ci][cj] + 1;

                if (ui == jlin && uj == jcol)
                    ok = 0;
            }
          }
      }

        t=(d[v[l-1].lin][v[l-1].col]+1)/2;


    fout << t << ' ';
    if (v[0].lin <= jlin && v[0].col < jcol) {
        i = v[0].lin;
        j = v[0].col;
    } else {
        i = jlin;
        j = jcol;
    }
    ok = 1;
    cautare(t, i, j, d, ok);

    fin.close();
    fout.close();

    return 0;
}