Cod sursa(job #1380293)

Utilizator Stefanandrei7Stefan Barabulea Stefanandrei7 Data 7 martie 2015 12:17:19
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 5.48 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++;
                        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++;
                        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++;
                        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++;
                        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++;
                        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++;
                        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++;
                        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++;
                        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=9999999999;
    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;
}