Cod sursa(job #78477)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 18 august 2007 00:06:17
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.53 kb
#include<stdio.h>
int n,m,a[110][110],rom[110][110],jul[110][110],i,j,ok,min,iafis,jafis,k;
char aux,siru[200];
int main()
{
 freopen("rj.in","r",stdin);
 freopen("rj.out","w",stdout);
 scanf("%ld %ld",&n,&m);
 for(i=0;i<=n;i++)
  {
  fgets(siru,114,stdin);
  j=0;
  for(k=0;k<m;k++)
  {
   aux=siru[k];
  if (aux!='\n')
    {
    j++;
   if (aux=='J')
    jul[i][j]=2;
   if (aux=='R')
    rom[i][j]=2;
   if (aux=='X')
      {
      jul[i][j]=1;
      rom[i][j]=1;
      }
     }
     else
      break;
      }
   }
  ok=1;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
  {
   if (rom[i][j]==0) rom[i][j]=15000;
   if (jul[i][j]==0) jul[i][j]=15000;
      }
  while (ok)
     {
     ok=0;
      for(i=1;i<=n;i++)
       for(j=1;j<=m;j++)
        if (rom[i][j]!=1)
            {
             if (rom[i+1][j]>rom[i][j]+1)
              {
              rom[i+1][j]=rom[i][j]+1;
              ok=1;
              }
             if (rom[i+1][j-1]>rom[i][j]+1)
              {
              rom[i+1][j-1]=rom[i][j]+1;
              ok=1;
              }
             if (rom[i+1][j+1]>rom[i][j]+1)
               {
               rom[i+1][j+1]=rom[i][j]+1;
               ok=1;
               }
             if (rom[i][j+1]>rom[i][j]+1)
               {
               rom[i][j+1]=rom[i][j]+1;
               ok=1;
               }
             if (rom[i][j-1]>rom[i][j]+1)
               {
                 rom[i][j-1]=rom[i][j]+1;
                 ok=1;
               }
             if (rom[i-1][j]>rom[i][j]+1)
               {
                rom[i-1][j]=rom[i][j]+1;
                ok=1;
               }
             if (rom[i-1][j-1]>rom[i][j]+1)
              {
               rom[i-1][j-1]=rom[i][j]+1;
               ok=1;
              }
             if (rom[i-1][j+1]>rom[i][j]+1)
              {
               rom[i-1][j+1]=rom[i][j]+1;
               ok=1;
              }
            }
     }
   ok=1;
    while (ok)
     {
     ok=0;
      for(i=1;i<=n;i++)
       for(j=1;j<=m;j++)
        if (jul[i][j]!=1)
            {
             if (jul[i+1][j]>jul[i][j]+1)
              {
              jul[i+1][j]=jul[i][j]+1;
              ok=1;
              }
             if (jul[i+1][j-1]>jul[i][j]+1)
              {
              jul[i+1][j-1]=jul[i][j]+1;
              ok=1;
              }
             if (jul[i+1][j+1]>jul[i][j]+1)
               {
               jul[i+1][j+1]=jul[i][j]+1;
               ok=1;
               }
             if (jul[i][j+1]>jul[i][j]+1)
               {
               jul[i][j+1]=jul[i][j]+1;
               ok=1;
               }
             if (jul[i][j-1]>jul[i][j]+1)
               {
                 jul[i][j-1]=jul[i][j]+1;
                 ok=1;
               }
             if (jul[i-1][j]>jul[i][j]+1)
               {
                jul[i-1][j]=jul[i][j]+1;
                ok=1;
               }
             if (jul[i-1][j-1]>jul[i][j]+1)
              {
               jul[i-1][j-1]=jul[i][j]+1;
               ok=1;
              }
             if (jul[i-1][j+1]>jul[i][j]+1)
              {
               jul[i-1][j+1]=jul[i][j]+1;
               ok=1;
              }
            }
     }
    min=200000;
  for(i=1;i<=n;i++)
   for(j=1;j<=m;j++)
    if (jul[i][j]==rom[i][j]&&rom[i][j]!=15000&&rom[i][j]!=1)
     {
     if (min>jul[i][j])
      {
      min=jul[i][j];
      iafis=i;
      jafis=j;
      }
     }
   printf("%ld %ld %ld\n",min-1,iafis,jafis);
   fclose(stdout);
  return 0;
  
}