Cod sursa(job #2575842)

Utilizator sorana.ghisorana ghiorghe sorana.ghi Data 6 martie 2020 15:44:14
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 3.13 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <iomanip>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int di[]={-1,-1,0,1,1,1,0,-1};
const int dj[]={0,1,1,1,0,-1,-1,-1};
int a[101][101],n,m,xj,xr,yj,yr,xf,yf;
int romeo[101][101], julieta[101][101];
void Afisare_Matrice(int mm[101][101])
{
    for (int i=1;i<=n;i++,cout<<endl)
        for (int j=1;j<=m;j++)
        cout<<setw(3)<<mm[i][j];
    cout<<endl;
    f.close();
}
void Citiri_Preluari()
{
    f>>n>>m;
    f.get();
    int k=1;
    char s[101];
    while (k<=n)
    {
        f.getline(s,101);
        for (int j=1;j<=m;j++)
        {
            if (s[j-1]=='X')
                a[k][j]=-1;
            else
                if (s[j-1]=='J')
                {
                    xj=k;
                    yj=j;
                }
                else
                    if (s[j-1]=='R')
                {
                    xr=k;
                    yr=j;
                }
        }
        k++;
    }
}
int verificare(int i,int j,int mat[101][101])
{
    if (i<1 || i>n || j<1 || j>m)
        return 0;
    if (a[i][j]==-1 || mat[i][j]!=0)
        return 0;
    return 1;
}

void Lee(int xi, int yi, int mat[101][101])
{
    int c[3][10000]={0},p,u,i,j,inou,jnou,k;
    //1 - linie , 2-coloana
    c[1][1]=xi;
    c[2][1]=yi;
    p=u=1;
    mat[xi][yi]=1;
    while (p<=u)
    {
        i=c[1][p];
        j=c[2][p];
        for (k=0;k<8;k++)
        {
            inou=i+di[k];
            jnou=j+dj[k];
            if (verificare(inou,jnou,mat))
                {
                    mat[inou][jnou]=mat[i][j]+1;
                    u++;
                    c[1][u]=inou;
                    c[2][u]=jnou;
                }
        }
        p++;
    }

}
int Intersectie()
{
    for (int i=1;i<=n;i++)
        for (int j=1;j<=m;j++)
            if (romeo[i][j]== julieta[i][j] && romeo[i][j]!=0&& julieta[i][j]!=0)
            {
                xf=i;yf=j;
                return romeo[i][j];
            }
}
/*
void Drum_Romeo(int i,int j)
{
    int k,xnou,ynou;
    if (i!=xr || j!=yr)
    {
        for (k=0;k<8;k++)
        {
            xnou=i-di[k];
            ynou=j-dj[k];
            if (romeo[xnou][ynou]+1==romeo[i][j])
            {
                Drum_Romeo(xnou,ynou);
            break;
            }
        }
    }
    cout<<i<<" "<<j<<endl;
}
void Drum_Julieta(int i, int j)
{
    int k,xnou,ynou;
    if (i!=xj || j!=yj)
    {
        for (k=0;k<8;k++)
        {
            xnou=i-di[k];
            ynou=j-dj[k];
            if (julieta[xnou][ynou]+1==julieta[i][j])
            {
                Drum_Julieta(xnou,ynou);
                break;
            }
        }
    }


    cout<<i<<" "<<j<<endl;
}
*/
int main()
{
    Citiri_Preluari();
    //Afisare_Matrice(a);
    Lee(xr,yr,romeo);
    //Afisare_Matrice(romeo);
    Lee(xj,yj,julieta);
    //Afisare_Matrice(julieta);
    int x=Intersectie();
    g<<xf<<" "<<yf<<" "<<x;
    //Drum_Romeo(xf,yf);
    //Drum_Julieta(xf,yf);
    g.close();
    return 0;
}