Cod sursa(job #1655709)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 18 martie 2016 11:23:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.02 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int a[110][110],b[110][110],i,j,n,m,ir,p,jr,ij,jj,co1[10010],co2[10010],u;
char v[110],c;
void fil(int l1,int c1,int l2,int c2,int u)
{
    co1[u]=l1;
    co2[u]=c1;
    if(l1==l2 && c1==c2)
        {
            p=(a[l1][c1]-1)/2;
            fout<<p<<" ";
        for(int i=1;i<=u;i++)
            {
            if(a[co1[i]][co2[i]]==p+1)
                fout<<co1[i]<<" "<<co2[i];
            }
            return;
        }
    else
    {
        if(a[l1+1][c1]==0)
        {
            a[l1+1][c1]=a[l1][c1]+1;
            fil(l1+1,c1,l2,c2,u+1);
        }
        if(a[l1-1][c1]==0)
        {
            a[l1-1][c1]=a[l1][c1]+1;
            fil(l1-1,c1,l2,c2,u+1);
        }
        if(a[l1][c1+1]==0)
        {
            a[l1][c1+1]=a[l1][c1]+1;
            fil(l1,c1+1,l2,c2,u+1);
        }
        if(a[l1][c1-1]==0)
        {
            a[l1][c1-1]=a[l1][c1]+1;
            fil(l1,c1-1,l2,c2,u+1);
        }
        if(a[l1+1][c1+1]==0)
        {
            a[l1+1][c1+1]=a[l1][c1]+1;
            fil(l1+1,c1+1,l2,c2,u+1);
        }
        if(a[l1-1][c1-1]==0)
        {
            a[l1-1][c1-1]=a[l1][c1]+1;
            fil(l1-1,c1-1,l2,c2,u+1);
        }
        if(a[l1-1][c1+1]==0)
        {
            a[l1-1][c1+1]=a[l1][c1]+1;
            fil(l1-1,c1+1,l2,c2,u+1);
        }
        if(a[l1+1][c1-1]==0)
        {
            a[l1+1][c1-1]=a[l1][c1]+1;
            fil(l1+1,c1-1,l2,c2,u+1);
        }

    }
}
void fil1(int l1,int c1,int l2,int c2)
{
    if(l1==l2 && c1==c2)
        {
            return;
        }
    else
    {
        if(b[l2+1][c2]==0)
        {
            b[l2+1][c2]=b[l2][c2]+1;
            fil1(l1,c1,l2+1,c2);
        }
        if(b[l2-1][c2]==0)
        {
            b[l2-1][c2]=b[l2][c2]+1;
            fil1(l1,c1,l2-1,c2);
        }
        if(b[l2][c2+1]==0)
        {
            b[l2][c2+1]=b[l2][c2]+1;
            fil1(l1,c1,l2,c2+1);
        }
        if(b[l2][c2-1]==0)
        {
            b[l2][c2-1]=b[l2][c2]+1;
            fil1(l1,c1,l2,c2-1);
        }
    }
}
int main()
{
    fin>>n>>m;
    fin.getline(v,100);
    for(i=1;i<=n;i++)
    {
        fin.getline(v,100);
        for(j=0;j<strlen(v);j++)
        {
        c=v[j];
        if(c=='X')
            a[i][j+1]=-1;
            else
                a[i][j+1]=0;
            if(c=='R')
            {
                ir=i;
                jr=j+1;
            }
            if(c=='J')
            {
                ij=i;
                jj=j+1;
            }
            b[i][j+1]=a[i][j+1];
        }

    }
    for(i=1;i<=m;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
        b[0][i]=-1;
        b[n+1][i]=-1;
    }
    for(i=1;i<=n;i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
        b[i][0]=-1;
        b[i][m+1]=-1;
    }
    a[ir][jr]=1;
    b[ij][jj]=1;
    fil(ir,jr,ij,jj,1);
    return 0;
}