Cod sursa(job #902766)

Utilizator criss_kidMeirosu Ioana Cristina criss_kid Data 1 martie 2013 16:36:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.36 kb
#include <iostream>
#include<fstream>
using namespace std;
int n,m,i,j,a[100][100],k=8,b[100][100],prim,ultim;
int ln[8]={1,1,0,-1,-1,-1,0,1};
int col[8]={0,1,1,1,0,-1,-1,-1};
fstream f("fis.in",ios::in);
fstream g("fis.out",ios::out);
struct coordonate
{
    int x,y;
};
coordonate c[100],p,v,pozr,pozj;
void citire()
{
    char s[100];
    f>>n;
    f>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(s,100);
        for(j=0;j<m;j++)
        {
            if(s[j]==' ')
                a[i][j+1]=0;
            else if(s[j]=='X')
                a[i][j+1]=1;
            else if(s[j]=='R')
                pozr.x=i,pozr.y=j+1;
            else
                pozj.x=i,pozj.y=j+1;
        }
    }
}
void bordare()
{
    n=n+1;
    m=m+1;
    for(i=0;i<=n;i++)
        a[i][0]=a[i][m]=-1;
    for(j=0;j<=m;j++)
        a[0][j]=a[n][j]=-1;

}
void copiere()
{
    for(i=0;i<=n;i++)
        for(j=0;j<=m;j++)
            b[i][j]=a[i][j];
}
void romeo()
{
    prim=ultim=1;
    c[prim]=pozr;
    a[pozr.x][pozr.y]=2;
    while(prim<=ultim)
    {
        p=c[prim];
        prim++;
        for(k=0;k<=7;k++)
        {
            v.x=p.x+ln[k];
            v.y=p.y+col[k];
            if(a[v.x][v.y]==0)
            {
                ultim++;
                c[ultim]=v;
                a[v.x][v.y]=a[p.x][p.y]+1;
            }
        }
    }
}
void julieta()
{
    b[pozj.x][pozj.y]=2;
    prim=ultim=1;
    c[prim]=pozj;
    while(prim<=ultim)
    {
        p=c[prim];
        prim++;
        for(k=0;k<=7;k++)
        {
            v.x=p.x+ln[k];
            v.y=p.y+col[k];
            if(b[v.x][v.y]==0)
            {
                ultim++;
                c[ultim]=v;
                b[v.x][v.y]=b[p.x][p.y]+1;
            }
        }
    }

}
void afisare()
{
    n--;
    m--;
    int tmin=100000000,lin,col;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            {
            if(a[i][j] == b[i][j] && a[i][j] > 1)
            {
                if(a[i][j] -1 < tmin)
                {
                    tmin = a[i][j]-1 ;
                    lin = i;
                    col = j;
                    }
            }
    }
    g<<tmin<<" "<<lin<<" "<<col;
}
int main()
{
    citire();
    bordare();
    copiere();
    romeo();
    julieta();
    afisare();

}