Cod sursa(job #936862)

Utilizator mihai_tMihai Teletin mihai_t Data 8 aprilie 2013 23:47:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.15 kb
#include <fstream>
#include <queue>
using namespace std;

int a[100][100],n,m,rm[100][100],jl[100][100];
struct pct
{
    int x,y;
};
pct rom,jul;
queue <pct> c;
const int dx[]={1,1,0,-1,-1,-1,0,1};
const int dy[]={0,-1,-1,-1,0,1,1,1};
void cit()
{
    int i,j;
    char c;
    ifstream f;
    f.open("rj.in");
    f>>n>>m;
    f.get();
    for (i=0;i<n;i++)
    {
        for (j=0;j<m;j++)
        {
            f.get(c);
            switch (c)
            {
            case ' ': a[i][j]=0;
                    break;
            case 'X': a[i][j]=-1;
                    break;
            case 'R': a[i][j]=0;
                      rom.x=i;
                      rom.y=j;
                    break;
            case 'J': a[i][j]=0;
                      jul.x=i;
                      jul.y=j;
                    break;
            }
        }
     f.get();
    }
    f.close();
}
void lee(int b[100][100],int x,int y)
{
    pct p,p2;
    p.x=x;
    p.y=y;
    c.push(p);
    while (!c.empty())
    {
        p=c.front();
        c.pop();
        for (int i=0;i<8;i++)
        {
            if (p.x+dx[i]>=0 && p.x+dx[i]<n && p.y+dy[i]>=0 && p.y+dy[i]<n)
                if (a[p.x+dx[i]][p.y+dy[i]]==0 && (p.x+dx[i]!=x ||  p.y+dy[i]!=y))
                {
                    if (b[p.x+dx[i]][p.y+dy[i]]==0 || b[p.x+dx[i]][p.y+dy[i]]>1+b[p.x][p.y])
                    {
                        b[p.x+dx[i]][p.y+dy[i]]=1+b[p.x][p.y];
                        p2.x=p.x+dx[i];
                        p2.y=p.y+dy[i];
                        c.push(p2);
                    }
                }
        }
    }
}
void rez()
{
    pct p;
    int min=10000;
    for (int i=0;i<n;i++)
        for (int j=0;j<m;j++)
        {
            if (rm[i][j]!=0 && rm[i][j]==jl[i][j]) if (rm[i][j]<min)
            {
                min=rm[i][j];
                p.x=i+1;
                p.y=j+1;
            }
        }
    ofstream g;
    g.open("rj.out");
    g<<min+1<<" "<<p.x<<" "<<p.y;
    g.close();
}
int main()
{

    cit();
    lee(rm,rom.x,rom.y);
    lee(jl,jul.x,jul.y);
    rez();
    return 0;
}