Cod sursa(job #2304900)

Utilizator PatrascuAdrian1Patrascu Adrian Octavian PatrascuAdrian1 Data 18 decembrie 2018 19:39:38
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.82 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char s[101];
int n,m,i,j,a[101][101],b[101][101],x1,x2,y1,y2,i1,j1,mmin=10002,ci,cj;
const int dx[]= {-1,-1,1,1,0,0,-1,1},dy[]= {1,-1,-1,1,-1,1,0,0};
struct coada
{
    int c,l;
} Q[100001];
void lee(int a[][101], int n, int m, int x, int y)
{
    int st=1,dr=1,k,ii,jj,OK;
    Q[st].c=y,Q[st].l=x;
    while(st<=dr)
    {
        i=Q[st].l,j=Q[st].c;
        for(k=0; k<8; k++)
        {
            ii=i+dx[k],jj=j+dy[k];
            if(a[ii][jj]==0)
            {
                a[ii][jj]=a[i][j]+1;
                dr++;
                Q[dr].l=ii,Q[dr].c=jj;
            }
        }
        st++;
    }
}
void afismat(int a[][101], int n, int m)
{
    for(int i=1; i<=n; i++)
    {
        for(int j=1; j<=m; j++)
            g<<a[i][j];
        g<<'\n';
    }
}
int main()
{
    f>>n>>m,f.get();
    for(i=0; i<n; i++)
    {
        i1++,f.getline(s,sizeof(s));
        for(j=0; j<m; j++)
        {
            j1++;
            if(strchr("X",s[j]))
                b[i1][j1]=a[i1][j1]=-1;
            else if(strchr(" ",s[j]))
                b[i1][j1]=a[i1][j1]=0;
            else if(strchr("R",s[j]))
                a[i1][j1]=1,x1=i1,y1=j1;
            else
                b[i1][j1]=1,x2=i1,y2=j1;
        }
        j1=0;
    }
    for(i=0; i<=n+1; i++)
        a[i][0]=a[i][m+1]=b[i][0]=b[i][m+1]=-1;
    for(j=0; j<=m+1; j++)
        a[0][j]=a[n+1][j]=b[0][j]=b[n+1][j]=-1;
    lee(a,n,m,x1,y1);
    lee(b,n,m,x2,y2);
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]==b[i][j] && a[i][j]>=1)
            {
                if(a[i][j]<mmin)
                    mmin=a[i][j],ci=i,cj=j;
            }
    g<<mmin<<" "<<ci<<" "<<cj;
    return 0;
}