Cod sursa(job #880676)

Utilizator MagnvsDaniel Constantin Anghel Magnvs Data 17 februarie 2013 01:29:26
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <stdio.h>
#include <string.h>
 
int v[101][101],lee[2][10001],o[8],u[8],ok=0;
int n,m,i,j,l=0,r=2,nx,ny;
char str[103];
 
void citire()
{
    scanf("%d%d\n",&n,&m);
    for (i=1;i<n+1;i++)
    {
        fgets(str,102,stdin);
        for (j=0;j<m;j++)
        {
            if (str[j]=='X') v[i][j+1]=10001;
            else if (str[j]=='R')
            {
                lee[0][1]=i;
                lee[1][1]=j+1;
                v[i][j+1]=1;
            }
            else if (str[j]=='J')
            {
                lee[0][2]=i;
                lee[1][2]=j+1;
                v[i][j+1]=-1;
            }
        }
    }
}
 
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    citire();
    //int k,x,y;
    //scanf("%d%d%d%d%d%d%d",&n,&m,&lee[0][1],&lee[1][1],&lee[0][2],&lee[1][2],&k);
    //for (i=1;i<n+1;i++)
       //       for (j=1;j<m+1;j++) v[i][j]=0;
//  for (i=1;i<k+1;i++)
//  {
//      scanf("%d%d",&x,&y);
//      v[x][y]=10001;
//  }
//  v[lee[0][1]][lee[1][1]]=1;
//  v[lee[0][2]][lee[1][2]]=-1;
    o[3]=0;o[4]=0;u[1]=0;u[6]=0;
    o[0]=-1;o[1]=-1;o[2]=-1;o[5]=1;o[6]=1;o[7]=1;
    u[0]=-1;u[3]=-1;u[5]=-1;u[2]=1;u[4]=1;u[7]=1;
    while ((l<r)&&(ok==0))
    {
        ++l;
        for (i=0;i<8;i++)
        {
            nx=lee[0][l]+o[i];
            ny=lee[1][l]+u[i];
            if ((0<nx)&&(nx<n+1)&&(ny>0)&&(ny<m+1)&&(v[nx][ny]==0))
            {
             ++r;
             lee[0][r]=nx;
             lee[1][r]=ny;
             if (v[lee[0][l]][lee[1][l]]>0) v[nx][ny]=v[lee[0][l]][lee[1][l]]+1;
             else v[nx][ny]=v[lee[0][l]][lee[1][l]]-1;
            }
            else if ((0<nx)&&(nx<n+1)&&(ny>0)&&(ny<m+1)&&(v[nx][ny]-1==-v[lee[0][l]][lee[1][l]])) {ok=1;break;}
        }
    }
    printf("%d%c%d%c%d",v[nx][ny],' ',nx,' ',ny);
    return 0;
}