Cod sursa(job #906412)

Utilizator fsx1073Alex Toma fsx1073 Data 6 martie 2013 20:13:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.23 kb
#include <iostream>
#include <fstream>
#include <string.h>
using namespace std;
char a[102][102],s[102];
int l[10]={-1,-1,0,1,1,1,0,-1},c[10]={0,1,1,1,0,-1,-1,-1},k=1,nr[102][102],nr2[102][102],n,m;
/*bool verif()
{
    int i,j;
    for(i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            if (nr[i][j]==nr2[i][j] && nr[i][j]!=0 && nr[i][j]!=-1)
                return 1;
            else
                return 0;
        }
    }
}*/
void rsprej(int x1,int y1)
{
    int i,j,inou,jnou,min=103000;
    for (i=0;i<=7;i++)
    {
        inou=x1+l[i];
        jnou=y1+c[i];
        if (nr[inou][jnou]==0)
        {
            nr[inou][jnou]=k+1;
        }
    }
}
void jsprer(int x2,int y2)
{
    int i,j,inou,jnou;
    for (i=0;i<=7;i++)
    {
        inou=x2+l[i];
        jnou=y2+c[i];
        if (nr2[inou][jnou]==0)
        {
            nr2[inou][jnou]=k+1;
        }
    }
}
int main()
{
    ifstream f("rj.in");
    ofstream g("rj.out");
    int ir,ij,jr,jj,i,j,max,min,iff,r,jf;
    f>>n>>m;
    f.get();
    for (i=1;i<=n;i++)
    {
        f.get(s,102);
        s[m]=NULL;
        for (j=0;j<m;j++)
        {
            if (s[j]==' ')
            s[j]='0';
            a[i][j+1]=s[j];
            if (a[i][j+1]=='R')
            {
                ir=i;
                jr=j+1;
            }
            else
            {
                if (a[i][j+1]=='J')
                {
                    ij=i;
                    jj=j+1;
                }
            }
        }
        f.get();
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            if (a[i][j]=='X')
                nr[i][j]=-1;
            if (a[i][j]=='0')
                nr[i][j]=0;
            if (a[i][j]=='R')
                nr[i][j]=0;
            if (a[i][j]=='J')
                nr[i][j]=0;
            nr2[i][j]=nr[i][j];
        }
    }
    nr[ir][jr]=1;
    nr2[ij][jj]=1;
    max=n;
    if (m>n)
    max=m;
    while (k<=max)
    {
        for (i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
            {
                if (nr[i][j]==k)
                    rsprej(i,j);
                if (nr2[i][j]==k)
                    jsprer(i,j);
            }
        }
        k++;
    }
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
            if (nr[i][j]==nr2[i][j] && nr[i][j]!=0 && nr[i][j]!=-1)
            {
                cout<<i<<" "<<j<<endl;
                if (nr[i][j]<min)
                {
                    min=nr[i][j];
                    iff=i;
                    jf=j;
                }
            }
        }
    }
    g<<min<<" "<<iff<<" "<<jf;
    //-----------------------------------------
    /*for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            g<<nr[i][j]<<"            ";
        g<<endl;
    }
    g<<endl<<endl;
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            g<<nr2[i][j]<<"            ";
        g<<endl;
    }*/
    /*g<<ir<<" "<<jr;
    g<<endl;
    g<<ij<<" "<<jj;*/
    /*for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
            g<<a[i][j];
        g<<endl;
    }*/
    //-----------------------------------------

}