Cod sursa(job #946255)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 4 mai 2013 10:47:04
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 4.25 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
char a[105][105];
struct Element{
short int line;
short int col;
};
short R[105][105],J[105][105],m,n,x1,y1,x2,y2,minimum=10005,ind,col;
Element v[105*105],vv[105*105];
void read()
{
    short i,j;
    bool yes=0;
    char ch;
    f>>n;
    f>>m;
    f>>noskipws;
    for(i=1;i<=n;i++)
    {
        if(yes==0)
            f>>ch;
        yes=0;
       for(j=1;j<=m;j++)
        {
            f>>a[i][j];
            if(a[i][j]=='\n')
            {
                yes=1;
                while(j<=m)
                {
                    a[i][j]=' ';
                    j++;
                }
                break;
            }
            if(a[i][j]=='R')
            {
                R[i][j]=1;
                x1=i;
                y1=j;
            }
            if(a[i][j]=='J')
            {
                J[i][j]=1;
                x2=i;
                y2=j;
            }
            if(a[i][j]=='X')
            {
                R[i][j]=-1;
                J[i][j]=-1;
            }
        }
    }

}
void bordare()
{
    short i;
    for(i=0;i<=m+1;i++)
        R[0][i]=R[n+1][i]=J[0][i]=J[n+1][i]=-1;
    for(i=0;i<=n+1;i++)
        R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
}
void Lee()
{
    v[1].line=x1;v[1].col=y1;short  k=1;
    R[x1][y1]=1;
    short i,x,y;
    for(i=1;i<=k;i++)
    {
        x=v[i].line; y=v[i].col;
        if(R[x][y+1]==0)
        {
            R[x][y+1]=R[x][y]+1;
            v[++k].line=x;
            v[k].col=y+1;
        }
        if(R[x][y-1]==0)
        {
            R[x][y-1]=R[x][y]+1;
            v[++k].line=x;
            v[k].col=y-1;
        }
        if(R[x+1][y]==0)
        {
            R[x+1][y]=R[x][y]+1;
            v[++k].line=x+1;
            v[k].col=y;
        }
        if(R[x-1][y]==0)
        {
            R[x][y+1]=R[x][y]+1;
            v[++k].line=x-1;
            v[k].col=y;
        }
        if(R[x+1][y+1]==0)
        {
            R[x+1][y+1]=R[x][y]+1;
            v[++k].line=x+1;
            v[k].col=y+1;
        }
        if(R[x-1][y-1]==0)
        {
            R[x-1][y-1]=R[x][y]+1;
            v[++k].line=x-1;
            v[k].col=y-1;
        }
        if(R[x+1][y-1]==0)
        {
            R[x+1][y-1]=R[x][y]+1;
            v[++k].line=x+1;
            v[k].col=y-1;
        }
        if(R[x-1][y+1]==0)
        {
            R[x-1][y+1]=R[x][y]+1;
            v[++k].line=x-1;
            v[k].col=y+1;
        }
    }
}
void Lee2()
{
    vv[1].line=x2;vv[1].col=y2;short  k=1;
    J[x2][y2]=1;
    short i,x,y;
    for(i=1;i<=k;i++)
    {
        x=vv[i].line; y=vv[i].col;
        if(J[x][y+1]==0)
        {
            J[x][y+1]=J[x][y]+1;
            vv[++k].line=x;
            vv[k].col=y+1;
        }
        if(J[x][y-1]==0)
        {
            J[x][y-1]=J[x][y]+1;
            vv[++k].line=x;
            vv[k].col=y-1;
        }
        if(J[x+1][y]==0)
        {
            J[x+1][y]=J[x][y]+1;
            vv[++k].line=x+1;
            vv[k].col=y;
        }
        if(J[x-1][y]==0)
        {
            J[x-1][y]=J[x][y]+1;
            vv[++k].line=x-1;
            vv[k].col=y;
        }
        if(J[x+1][y+1]==0)
        {
            J[x+1][y+1]=J[x][y]+1;
            vv[++k].line=x+1;
            vv[k].col=y+1;
        }
        if(J[x-1][y-1]==0)
        {
            J[x-1][y-1]=J[x][y]+1;
            vv[++k].line=x-1;
            vv[k].col=y-1;
        }
        if(J[x+1][y-1]==0)
        {
            J[x+1][y-1]=J[x][y]+1;
            vv[++k].line=x+1;
            vv[k].col=y-1;
        }
        if(J[x-1][y+1]==0)
        {
            J[x-1][y+1]=J[x][y]+1;
            vv[++k].line=x-1;
            vv[k].col=y+1;
        }
    }
}
void browse()
{
    short i,j;
    for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
            if(R[i][j]!=0 && R[i][j]!=-1 && R[i][j]==J[i][j] && minimum>R[i][j])
            {
                minimum=R[i][j];
                ind=i;
                col=j;
            }
    g<<minimum<<" "<<ind<<" "<<col<<"\n";
}
int main()
{
    read();
    bordare();
    Lee();
    Lee2();
    browse();
}