Cod sursa(job #255364)

Utilizator andumMorie Daniel Alexandru andum Data 9 februarie 2009 12:53:20
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.14 kb
#include <stdio.h>

int n,m,i,j,l,b[101][101],c[101][101],k,lv,cv,a[101][101],xf,yf,q;
int dx[8]={0, 1, 0, -1, -1, 1, -1, 1};
int dy[8]={1, 0, -1, 0, -1, 1,  1,-1};
char ch;

int main()

{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    
    scanf("%d %d", &n, &m);
    scanf("%c", &ch);
    for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        {
         scanf("%c", &ch);
         if (ch=='X')
            {
             a[i][j]=-1;b[i][j]=-1;
            } 
         if (ch==' ')
            {
             a[i][j]=0;b[i][j]=0;
            } 
         if (ch=='R')
            a[i][j]=1;
         if (ch=='J')
            b[i][j]=1;
        }
        scanf("%c", &ch);
    }

    for (j=1;j<=m+1;j++)
        {
         a[0][j]=-1;
         b[0][j]=-1;
         a[n+1][j]=-1;
         b[n+1][j]=-1;
        } 
    for (i=0;i<=n+1;i++)
        {
         a[i][0]=-1;
         b[i][0]=-1;
         a[i][m+1]=-1;
         b[i][m+1]=-1;
        } 
    k=1;
    q=0;
    while (q==0) 
          {
           q=1;
           k++;
           for (i=1;i<=n;i++)
           for (j=1;j<=m;j++)
               if (a[i][j]==k-1)
                  for (l=0;l<8;l++)
                      {
                       lv=i+dx[l];
                       cv=j+dy[l];
		               if (a[lv][cv]==0)
		                  {a[lv][cv]=k;
                          q=0;}
                      } 
          }
    k=1;
    q=0;
    while (q==0) 
          {
           q=1;
           k++;
           for (i=1;i<=n;i++)
           for (j=1;j<=m;j++)
               if (b[i][j]==k-1)
                  for (l=1;l<=8;l++)
                      {
                       lv=i+dx[l];
		               cv=j+dy[l];
		               if (b[lv][cv]==0)
		               {b[lv][cv]=k;
		               q=0;}
                      } 
          }
    for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
        if (a[i][j]==b[i][j] && a[i][j]>0 && a[i][j]<k)
           {
            k=a[i][j];
            xf=i;
            yf=j;
           } 
    if (q)
       printf("%d %d %d",k,xf,yf);
 
    return 0;
}