Cod sursa(job #876975)

Utilizator YoYoxxIftimesei Ioan YoYoxx Data 12 februarie 2013 14:03:11
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.6 kb
#include <fstream>
#include <iostream>
#include<string.h>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n,m,x1,x2,y1,y2,sol=0;
const int dx[]={0,1,1,1,0,-1,-1,-1};
const int dy[]={1,1,0,-1,-1,-1,0,1};
int mr[101][101];
int mj[101][101];
struct c
{
    int px[10404];
    int py[10404];
}c;

struct s
{
    int px[10404];
    int py[10404];
}s;

void citire()
{
    int i,j;
    char v[101];
    in>>n>>m;
    for(i=0;i<=n;i++)
    {
        in.getline(v,m+1);
        for(j=1;j<=m;j++)
       {
           if(v[j-1]=='R')
           {
               mr[i][j]=1;
               x1=i;
               y1=j;
           }
           if(v[j-1]=='J')
           {
               mr[i][j]=0;
               x2=i;
               y2=j;
           }
           if(v[j-1]=='X')mr[i][j]=-1;
           if(v[j-1]==' ') mr[i][j]=0;
       }
    }

}

void bordare()
{
    int i,j;
    for(i=0;i<=n+1;i++)
    {
        mr[i][0]=-1;
        mr[i][m+1]=-1;
    }
    for(i=1;i<=m;i++)
    {
        mr[0][i]=-1;
        mr[n+1][i]=-1;
    }
}
void copiere()
{
    int i,j;
    for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
        {
            mj[i][j]=mr[i][j];
        }
    }
}

void lr()
{
    int a,b,k,prim=0,ultim=0;

    c.px[prim]=x1;
    c.py[prim]=y1;

    while(prim<=ultim&&mr[x2][y2]==0)
    {

        a=c.px[prim];
        b=c.py[prim];
        prim++;
        for(k=0;k<8;k++)
        {
            if(mr[a+dx[k]][b+dy[k]]==0&&mr[a+dx[k]][b+dy[k]]!=-1)
            {
            ultim++;
            c.px[ultim]=a+dx[k];
            c.py[ultim]=b+dy[k];
            mr[a+dx[k]][b+dy[k]]=mr[a][b]+1;
            }
        }
    }
}

void lj()
{
    int a,b,k,prim=0,ultim=0;

    c.px[prim]=x2;
    c.py[prim]=y2;

    while(prim<=ultim&&mj[x1][y1]==0)
    {

        a=c.px[prim];
        b=c.py[prim];
        prim++;
        for(k=0;k<8;k++)
        {
            if(mj[a+dx[k]][b+dy[k]]==0&&mj[a+dx[k]][b+dy[k]]!=-1)
            {
            ultim++;
            c.px[ultim]=a+dx[k];
            c.py[ultim]=b+dy[k];
            mj[a+dx[k]][b+dy[k]]=mj[a][b]+1;
            }
        }
    }
}

int main()
{
    int i,j,mini=10404,mini2=102,mini3=103,ok=1;
    citire();
    bordare();
    copiere();
    lr();
    mj[x1][y1]=0;
    mj[x2][y2]=1;
    lj();



for(i=1;i<=n;i++)
{
    for(j=1;j<=m;j++)
    {
        if(mr[i][j]==mj[i][j])
        {
        s.px[sol]=i;
        s.py[sol]=j;
        sol++;
        }
    }

}


in.close();
out.close();
return 0;
}