Cod sursa(job #1380291)

Utilizator Stefanandrei7Stefan Barabulea Stefanandrei7 Data 7 martie 2015 12:01:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.3 kb
#include <iostream>
#include <fstream>
using namespace std;

int a[150][150],b[150][150],c[150][150],d[150][150];
int n,m,xr,yr,xj,yj,i,j;
ifstream f("rj.in");
ofstream g("rj.out");
void citire()
{
    char x;
    f>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m+1;j++)
    {
        f>>x;
        if(x=='\n' && j!=m+1)
        {
            x=' ';
            j++;
        }
        if(x==' ')
        {
            a[i][j]=0;
            b[i][j]=0;
        }
        if(x=='X')
        {
            a[i][j]=-1;
            b[i][j]=-1;
        }
        if(x=='R')
        {
            xr=i;
            yr=j;
        }

        if(x=='J')
        {
            xj=i;
            yj=j;
        }
    }
}
void rez()
{
    int k=0,sol=1;
    c[xr][yr]=1;
    while(sol==1)
    {
        sol=0;
        k++;
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
              if(c[i][j]==k)
        {
             if (a[i-1][j]==0 && c[i-1][j]==0 && i-1<=n && i-1>=1)
                    {
                        sol=1;
                        c[i-1][j]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i][j-1]==0 && c[i][j-1]==0 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        c[i][j-1]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i+1][j]==0 && c[i+1][j]==0 && i+1<=n && i+1>=1)
                    {
                        sol=1;
                        c[i+1][j]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i][j+1]==0 && c[i][j+1]==0 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        c[i][j+1]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i-1][j-1]==0 && c[i-1][j-1]==0 && i-1<=n && i-1>=1 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        c[i-1][j-1]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i-1][j+1]==0 && c[i+1][j+1]==0 && i-1<=n && i-1>=1 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        c[i-1][j+1]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i+1][j-1]==0 && c[i+1][j-1]==0 && i+1<=n && i+1>=1 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        c[i+1][j-1]=k+1;
                        a[i][j]=-1;
                    }
                    if (a[i+1][j+1]==0 && c[i+1][j+1]==0 && i+1<=n && i+1>=1 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        c[i+1][j+1]=k+1;
                        a[i][j]=-1;
                    }
            }

    }
    sol=1;
    k=0;
    d[xj][yj]=1;
    while(sol==1)
    {
         sol=0;
         k++;
        for (i=1; i<=n; i++)
            for (j=1; j<=m; j++)
                if (d[i][j]==k)
                {
                    if (b[i-1][j]==0 && d[i-1][j]==0 && i-1<=n && i-1>=1)
                    {
                        sol=1;
                        d[i-1][j]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i][j-1]==0 && d[i][j-1]==0 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        d[i][j-1]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i+1][j]==0 && d[i+1][j]==0 && i+1<=n && i+1>=1)
                    {
                        sol=1;
                        d[i+1][j]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i][j+1]==0 && d[i][j+1]==0 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        d[i][j+1]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i-1][j-1]==0 && d[i-1][j-1]==0 && i-1<=n && i-1>=1 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        d[i-1][j-1]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i-1][j+1]==0 && d[i-1][j+1]==0 && i-1<=n && i-1>=1 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        d[i-1][j+1]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i+1][j-1]==0 && d[i+1][j-1]==0 && i+1<=n && i+1>=1 && j-1<=m && j-1>=1)
                    {
                        sol=1;
                        d[i+1][j-1]=k++;
                        b[i][j]=-1;
                    }
                    if (b[i+1][j+1]==0 && d[i+1][j+1]==0 && i+1<=n && i+1>=1 && j+1<=m && j+1>=1)
                    {
                        sol=1;
                        d[i+1][j+1]=k++;
                        b[i][j]=-1;
                    }
                }

    }
    int min1=0,min2=0,min=99999999;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
          if(c[i][j]==d[i][j] && (c[i][j] && d[i][j])<min)
    {
        min1=i;
        min2=j;
        min=c[i][j];
    }
    g<<min<<' '<<min1<<' '<<min2;
}
int main()
{
    citire();
    rez();
    return 0;
}