Cod sursa(job #1659700)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 22 martie 2016 15:04:36
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.87 kb
#include <iostream>
#include <stdio.h>
using namespace std;
FILE *f,*g;
struct punct
{
    int Lin,Col;
};
punct Coada[103*103];
punct Directie[8]={{1,0},{0,1},{-1,0},{0,-1},{1,1},{1,-1},{-1,1},{-1,-1}};
int a[103][103];
int b[103][103];
int main()
{
    int n,m,i,j,xx,yy,x,y,q,e,r,w;
    char t;
    int startx,starty,starta,startb;
    f=fopen("rj.in","r");
    g=fopen("rj.out","w");
    fscanf(f,"%d %d",&n,&m);
    fscanf(f,"\n");
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fscanf(f,"%c",&t);
            if(t=='X')
            {
                a[i][j]=-1;
                b[i][j]=-1;
            }
            else
            {
                if(t=='R')
                {
                    a[i][j]=1;
                    startx=i;
                    starty=j;
                }
                if(t=='J')
                {
                    b[i][j]=1;
                    starta=i;
                    startb=j;
                }
            }
        }
        fscanf(f,"%c",&t);
    }
    Coada[0].Lin = startx;
    Coada[0].Col = starty;
    a[startx][starty] = 0;

    int pi = 0, ps = 0;
    int c=0;
    while (ps <= pi)
    {
        int xx = Coada[ps].Lin;
        int yy = Coada[ps].Col;

        for (int i = 0; i < 8; i++)
        {
            int x = xx + Directie[i].Lin;
            int y = yy + Directie[i].Col;

            if (a[x][y] == 0 && x >= 1 && x <= n && y >= 1 && y <= m)
            {
                    a[x][y] = a[xx][yy] + 1;
                    pi++;
                    Coada[pi].Lin = x;
                    Coada[pi].Col = y;
            }
            c++;
        }
        ps++;
    }
    Coada[0].Lin = starta;
    Coada[0].Col = startb;
    b[starta][startb] = 0;
    pi=0;
    ps=0;
    c=0;
    while (ps <= pi)
    {
        int xx = Coada[ps].Lin;
        int yy = Coada[ps].Col;

        for (int i = 0; i < 8; i++)
        {
            int x = xx + Directie[i].Lin;
            int y = yy + Directie[i].Col;

            if (b[x][y] == 0 && x >= 1 && x <= n && y >= 1 && y <= m)
            {
                    b[x][y] = b[xx][yy] + 1;
                    pi++;
                    Coada[pi].Lin = x;
                    Coada[pi].Col = y;
            }
            c++;
        }
        ps++;
    }
    w=100000;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if((a[i][j]==b[i][j])&&(a[i][j]>0))
            {
                if(a[i][j]<w)
                {
                    w=a[i][j];
                    q=i;
                    e=j;
                }
            }
        }
    }
    /*for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            fprintf(g,"%d ",b[i][j]);
        }
        fprintf(g,"\n");
    }*/
    fprintf(g,"%d %d %d",w+1,q,e);
    return 0;
}