Cod sursa(job #1582628)

Utilizator Octavian2399Manolache Octavian Octavian2399 Data 28 ianuarie 2016 10:30:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.44 kb
#include <iostream>
#include <cstring>
#include <fstream>
#include <cstdio>
using namespace std;
char l[101];
int a[101][101],b[101][101];
int i,j,n,m,tmin,R,J;
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,-1,-1,-1,0,1,1,1};
struct casa     {
                    int x,y;
                }rom,jul;
ifstream f("rj.in",ifstream::in);
ofstream g("rj.out",ifstream::out);

bool matrice(int x,int y)
{
    if(x<=n&&y<=m)
        return true;
    return false;
}

void drumjulieta(int x,int y,int n,int m)
{
    int k;
    if(matrice(x,y))
    if(b[x][y]>-1)
    {
        for(k=0;k<8;k++)
            if(b[x+dx[k]][y+dy[k]]==0&&matrice(x+dx[k],y+dy[k]))
            b[x+dx[k]][y+dy[k]]=b[x][y]+1;
    }
}
void drumromeo(int x,int y,int n,int m)
{
    int k;
    if(matrice(x,y))
    if(a[x][y]>-1)
    {
        for(k=0;k<8;k++)
            if(a[x+dx[k]][y+dy[k]]==0&&matrice(x+dx[k],y+dy[k]))
            a[x+dx[k]][y+dy[k]]=a[x][y]+1;
    }
}
int main()
{
    f>>n>>m;
    f.getline(l,5);
    for(i=1;i<=n;i++)
    {
        f.getline(l,102,'\n');
        for(j=0;j<m;j++)
            if(l[j]=='X')
                a[i][j+1]=b[i][j+1]=-1;
            else
                if(l[j]=='R')
                    {
                        a[i][j+1]=1;
                        rom.x=i;
                        rom.y=j+1;
                    }
                else
                    if(l[j]=='J')
                     {
                         b[i][j+1]=1;
                         jul.x=i;
                         jul.y=j+1;
                     }
                else
                    if(l[j]==' ')
                        a[i][j+1]=b[i][j+1]=0;
    }

    for(i=jul.x;i<=n;i++)
        for(j=jul.y;j<=m;j++)
            if(b[i][j]>-1)
                drumjulieta(i,j,n,m);
    for(i=jul.x;i>=1;i--)
        for(j=jul.y;j>=1;j--)
            if(b[i][j]>-1)
                drumjulieta(i,j,jul.x,jul.y);

    for(i=rom.x;i<=n;i++)
        for(j=rom.y;j<=m;j++)
            if(a[i][j]>-1)
                drumromeo(i,j,n,m);
    for(i=rom.x;i>=1;i--)
        for(j=rom.y;j>=1;j--)
            if(a[i][j]>-1)
                drumromeo(i,j,rom.x,rom.y);

    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0)
                {
                    g<<a[i][j]<<" "<<i<<" "<<j;
                    i=n+1;
                    j=m+1;
                }

    return 0;
}