Cod sursa(job #1403077)

Utilizator ioanas99Sandu Ioana ioanas99 Data 26 martie 2015 23:59:05
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1},ir,jr,j,i,m,n,a[100][100],ij,jj,b[100][100],l,nr=0,k,c,smin=11025,imin,jmin;
char ca;
int main()
{
    struct cr
    {unsigned char x,y;}cr[110];
    struct cj
    {unsigned char x,y;}cj[110];
    fin>>n>>m;
    fin.get(ca);
    for(i=1;i<=n;i++)
       {

        for(j=1;j<=m;j++)
        {
            fin.get(ca);
            if(ca=='X')
                a[i][j]=-1,b[i][j]=-1;
            if(ca=='R')
            {
                a[i][j]=1,b[i][j]=1;
                ir=i;
                jr=j;
            }
            if(ca=='J')
            {
                a[i][j]=1,b[i][j]=1;
                ij=i;
                jj=j;
            }
            if(ca==' ') a[i][j]=0,b[i][j]=0;
        }
        fin.get(ca);
       }
    for(j=0;j<=m+1;j++) a[0][j]=-1,a[n+1][j]=-1,b[0][j]=-1,b[n+1][j]=-1;
    for(i=1;i<=n;i++) a[i][0]=-1,a[i][m+1]=-1,b[i][0]=-1,b[i][m+1]=-1;
    i=0;l=ir;c=jr;cr[0].x=l;cr[0].y=c;
    while(i<=nr)
    {
        l=int(cr[i].x);c=int(cr[i].y);
        for(k=0;k<8;k++)
        {
            if(a[l+di[k]][c+dj[k]]==0)
                {a[l+di[k]][c+dj[k]]=a[l][c]+1;nr++;cr[nr].x=l+di[k];cr[nr].y=c+dj[k];}
            if(a[l+di[k]][c+dj[k]]==1) break;
        }
        i++;
  }
    i=0;l=ij;c=jj;cj[0].x=l;cj[0].y=c;nr=0;
    while(i<=nr)
    {
        l=int(cj[i].x);c=int(cj[i].y);
        for(k=0;k<8;k++)
        {
            if(b[l+di[k]][c+dj[k]]==0)
                {b[l+di[k]][c+dj[k]]=b[l][c]+1;nr++;cj[nr].x=l+di[k];cj[nr].y=c+dj[k];}
            if(b[l+di[k]][c+dj[k]]==1) break;
        }
        i++;
  }
  for(i=1;i<=n;i++)
  {
      for(j=1;j<=m;j++)
        fout<<a[i][j]<<" ";
      fout<<endl;
  }
  fout<<endl;
  for(i=1;i<=n;i++)
  {
      for(j=1;j<=m;j++)
        fout<<b[i][j]<<" ";
      fout<<endl;
  }
  for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(a[i][j]==b[i][j]&&b[i][j]!=-1&&b[i][j]!=1)
            if(a[i][j]+b[i][j]<smin) smin=b[i][j],imin=i,jmin=j;
  cout<<imin<<" "<<jmin<<" "<<smin;
    return 0;
}