Cod sursa(job #1769768)

Utilizator Claudiu07Pana Claudiu Claudiu07 Data 3 octombrie 2016 09:45:18
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.77 kb
#include <iostream>
#include <cstdio>
#include <climits>
using namespace std;
int i,j,n,m, a[100][100],p,u,b[100][100],nr,x,y,d[100][2],k,lin1, lin2,col1,col2,mi;
char c,s[105];
int main()
{
    /*f>>n>>m;
    f.get(c);
     for(int i=1; i<=n; i++)
    for(int j=1; j<=m; j++)
    {
        f.get(c);
        if(c=='R') a[i][j]=-2,lin1=i,col1=j;
        else if(c=='J') b[i][j]=-3,lin2=i,col2=j;
         else if(c=='X') a[i][j]=b[i][j]= -1;
    }*/
    freopen("date.in","r",stdin);//redefinesc tast ca fiin date.in
    freopen("date.out","w",stdout);
    scanf("%d%d\n",&n,&m);
    mi=INT_MAX;
    for (i=1;i<=n;i++)
    {
        gets(s+1);
    for (j=1;j<=m;j++)
        if (s[j]=='R') a[i][j]=-2,lin1=i,col1=j;
        else
        if (s[j]=='J') b[i][j]=-3,lin2=i,col2=j;
        else
            if (s[j]=='X') a[i][j]=b[i][j]=-1;
    }

       {
            p=1;
            u=1;
            d[p][0]=lin1;
            d[p][1]=col1;
            a[lin1][col1]=0;
            while(p<=u)
            {
                x=d[p][0];
                y=d[p][1]; k=a[x][y];
                if(x>1 && a[x-1][y]==0)
                { u++;
                    d[u][0]=x-1;
                    d[u][1]=y;
                    a[x-1][y]=k+1;
                }
                if(y<m && a[x][y+1]==0)
                {u++;
                    d[u][0]=x;
                    d[u][1]=y+1;
                    a[x][y+1]=k+1;;
                }
                if(x<n && a[x+1][y]==0)
                {u++;
                    d[u][0]=x+1;
                    d[u][1]=y;
                    a[x+1][y]=k+1;
                }
                if(y>1 && a[x][y-1]==0)
                {u++;
                    d[u][0]=x;
                    d[u][1]=y-1;
                    a[x][y-1]=k+1;
                }
                if(y>1 && x>1 && a[x-1][y-1]==0)
                {
                    u++;
                    d[u][0]=x-1;
                    d[u][1]=y-1;
                    a[x-1][y-1]=k+1;
                }
                if(y<m && x>1 && a[x-1][y+1]==0)
                {
                    u++;
                    d[u][0]=x-1;
                    d[u][1]=y+1;
                    a[x-1][y+1]=k+1;
                }
                if(y<m && x<n && a[x+1][y+1]==0)
                {
                    u++;
                    d[u][0]=x+1;
                    d[u][1]=y+1;
                    a[x+1][y+1]=k+1;
                }
                if(y>1 && x<n && a[x+1][y-1]==0)
                {
                    u++;
                    d[u][0]=x+1;
                    d[u][1]=y-1;
                    a[x+1][y-1]=k+1;
                }
                p++;
            }
        }
        {
            p=1;
            u=1;
            d[p][0]=lin2;
            d[p][1]=col2;
            b[lin2][col2]=0;
            while(p<=u)
            {
                x=d[p][0];
                y=d[p][1]; k=b[x][y];
                if(x>1 && b[x-1][y]==0)
                { u++;
                    d[u][0]=x-1;
                    d[u][1]=y;
                    b[x-1][y]=k+1;
                }
                if(y<m && a[x][y+1]==0)
                {u++;
                    d[u][0]=x;
                    d[u][1]=y+1;
                    b[x][y+1]=k+1;;
                }
                if(x<n && b[x+1][y]==0)
                {u++;
                    d[u][0]=x+1;
                    d[u][1]=y;
                    b[x+1][y]=k+1;
                }
                if(y>1 && b[x][y-1]==0)
                {u++;
                    d[u][0]=x;
                    d[u][1]=y-1;
                    b[x][y-1]=k+1;
                }
                if(y>1 && x>1 && b[x-1][y-1]==0)
                {
                    u++;
                    d[u][0]=x-1;
                    d[u][1]=y-1;
                    b[x-1][y-1]=k+1;
                }
                if(y<m && x>1 && b[x-1][y+1]==0)
                {
                    u++;
                    d[u][0]=x-1;
                    d[u][1]=y+1;
                    b[x-1][y+1]=k+1;
                }
                if(y<m && x<n && b[x+1][y+1]==0)
                {
                    u++;
                    d[u][0]=x+1;
                    d[u][1]=y+1;
                    b[x+1][y+1]=k+1;
                }
                if(y>1 && x<n && b[x+1][y-1]==0)
                {
                    u++;
                    d[u][0]=x+1;
                    d[u][1]=y-1;
                    b[x+1][y-1]=k+1;
                }
                p++;
            }
        }
    for(int i=1; i<=n; i++)
           for(int j=1; j<=m; j++)
        {
            if(a[i][j]==b[i][j] && a[i][j]<mi && a[i][j]>=1) mi=a[i][j];
        }
    printf("%3d",mi);
}