Cod sursa(job #267932)

Utilizator stefynr8Space Monkey stefynr8 Data 28 februarie 2009 15:17:25
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.82 kb
#include <stdio.h>

int r[101][101],ju[101][101],xf,yf,lv,cv,i,j,n,m,k,l,p,min;
char dx[8]={0, 1, 0, -1, 1, 1, -1,-1};
char dy[8]={1, 0, -1, 0, 1, -1, 1,-1};
char c;

int main()

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

        
//matricea lui romeo        
    k=1;
    p=0;
    while (p==0) 
          {
           p=1;
           k++;
           for (i=1;i<=n;i++)
               for (j=1;j<=m;j++)
                   if (r[i][j]==k-1)
                       for (l=0;l<8;l++)
                           {
                           lv=i+dx[l];
                           cv=j+dy[l];
		                   if (r[lv][cv]==0)
		                                    {
                                            r[lv][cv]=k;
                                            p=0;
                                            }
                      } 
          }
          
//matricea lui julieta          
    k=1;
    p=0;
    while (p==0) 
          {
           p=1;
           k++;
           for (i=1;i<=n;i++)
               for (j=1;j<=m;j++)
                   if (ju[i][j]==k-1)
                       for (l=0;l<8;l++)
                           {
                           lv=i+dx[l];
		                   cv=j+dy[l];
	                       if (ju[lv][cv]==0)
                                             {
                                              ju[lv][cv]=k;
		                                      p=0;
                                              }
                      } 
          }
    
    min=32000;      
    
    for (i=1;i<=n;i++)
        for (j=1;j<=m;j++)
            if (r[i][j]==ju[i][j]) 
               if (r[i][j]<min)
                  {
                  min=r[i][j];
                  xf=i;
                  yf=j;
                  }
                   
    if (p==1)
       printf("%d %d %d",k,xf,yf);
 
    return 0;
}