Cod sursa(job #247825)

Utilizator Alexa_ioana_14Antoche Ioana Alexandra Alexa_ioana_14 Data 24 ianuarie 2009 09:21:20
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include<stdio.h>   
#define N 105   
const int dx[]={-1,-1,-1,0,0,1,1,1};   
const int dy[]={-1,0,1,-1,1,-1,0,1};   
char s[N][N];   
int n,m,a[N][N];   
void bfs(int x0, int x1)   
{   
        int p=0,u=0,coada[N*N][2],x[2],y[2];   
        coada[u][0]=x0;   
        coada[u++][1]=x1;   
        a[x0][x1]=1;   
        while (p!=u)   
        {   
                x[0]=coada[p][0];   
                x[1]=coada[p++][1];   
                for (int i=0; i<8; ++i)   
                {   
                        y[0]=dx[i]+x[0];   
                        y[1]=dy[i]+x[1];   
                        if (!a[y[0]][y[1]])   
                        {   
                        coada[u][0]=y[0];   
                        coada[u++][1]=y[1];   
                        a[y[0]][y[1]]=1+a[x[0]][x[1]];   
                        }   
                }   
                   
        }   
           
}   
void citire()   
{   
int x0,x1,y0,y1;   
        freopen("rj.in","r",stdin);   
        freopen("rj.out","w",stdout);   
        scanf("%d%d\n",&n,&m);   
        for (int i=1; i<=n; ++i)   
        {   
                gets(1+s[i]);   
            for (int j=1; j<=m; ++j)   
                if (s[i][j]=='X')   
                a[i][j]=-1;   
                else  
                if (s[i][j]=='R')   
                {   
                x0=i; x1=j;   
                }   
                else    
                if (s[i][j]=='J')   
                {   
                        y0=i; y1=j;   
                }   
        }   
        for (int i=0;i<=n; ++i)   
    {   
        a[0][i]=-1;   
        a[n+1][i]=-1;   
    }   
    for (int i=0; i<=n+1; ++i)   
    {   
        a[i][0]=-1;   
        a[i][n+1]=-1;   
    }   
        bfs(x0,x1);   
        int p;   
        if (a[y0][y1]/2)   
         p=a[y0][y1]/2+1;   
        else  
        p=a[y0][y1]/2;   
        for (int i=1;i<=n; ++i)   
        for (int j=1; j<=m; ++j)   
        if (a[i][j]==p){   
        printf("%d %d %d\n",p,i,j);return;   
        }   
        /*for (int i=1;i<=n; ++i){  
        for (int j=1; j<=m; ++j) printf("%d ",a[i][j]);  
        printf("\n");  
        }*/  
}   
int main()   
{   
        citire();   
        return 0;   
}