Cod sursa(job #1631036)

Utilizator DennisZeuRotariu Dennis DennisZeu Data 5 martie 2016 12:47:40
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <iostream>
#include <fstream>
#include <cstring>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1},m,n,i,j,xr,yr,xj,yj,ro[101][101],ju[101][101],mini=999999999,minix,miniy,inc,sf;
char s[101];
struct Element
 {int l,c;
 unsigned d;
 }C[10201],x,y;
void citire()
{
    f>>n>>m;
    f.getline(s,101);
    for (i=1;i<=n;i++)
    {
        f.getline(s,101);
        for (j=0;j<m;j++)
        {
            if (s[j]=='J')
            {
                xj=i;
                yj=j+1;
                ro[i][j+1]=ju[i][j+1]=-2;
            }
            else if (s[j]=='R')
            {
                xr=i;
                yr=j+1;
                ro[i][j+1]=ju[i][j+1]=-2;
            }
            else if (s[j]=='X') ro[i][j+1]=ju[i][j+1]=-1;
            else ro[i][j+1]=ju[i][j+1]=-2;
        }
    }
}
 void lee(int k[][101],int x0,int y0)
{
    int inc,sf;
    inc=sf=0;
    k[x0][y0]=1;
    C[inc].l=x0;
    C[inc].c=y0;
    y.d=x.d=1;
    while (inc<=sf)
    {
 x = C[inc++];
 for (i=0; i<8; i++)
 { y.l = x.l + dx[i]; y.c = x.c + dy[i];
 if (k[y.l][y.c] == -2)
 {
 k[y.l][y.c] = k[x.l][x.c]+1;
 C[++sf]= y;
 }
 }
 }

    }

     void minim()
{
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {

        if(ro[i][j]==ju[i][j]&&ro[i][j]>0&&ju[i][j]>0)
            if(ro[i][j]<mini)
                {
                    mini=ro[i][j];
                    minix=i;
                    miniy=j;
                }
        }
}
/*void afisare()
{
    g<<mini<<' '<<minix<<' '<<miniy;
}*/
int main()
{
    citire();
    lee(ro,xr,yr);
    lee(ju,xj,yj);
    minim();
  g<<mini<<' '<<minix<<' '<<miniy<<'\n';
 /* for (i=1;i<=n;i++)
 { for (j=1;j<=m;j++)
 g<<ju[i][j]<<' ';g<<'\n';
 }*/
    g.close();
    return 0;
}