Cod sursa(job #1636342)

Utilizator mihaelacarinaCzupper Mihaela Carina mihaelacarina Data 7 martie 2016 09:03:37
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include <iostream>
#include <fstream>
using namespace std;
#define DimMax 20
#define DimMaxCoada 400
ifstream fin("alee.in");
ofstream fout("alee.out");
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
struct Element
{
    int l,c;
    unsigned d;
};
Element C[DimMaxCoada], x, y;
int A[DimMax][DimMax],n,m,x1,y1,i,j,k,IncC,SfC,x2,y2, mini=999999999;
void citire()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
    {
        fin>>j>>k;
        A[j][k]=-1;
    }
    fin>>x1>>y1>>x2>>y2;
    A[x2][y2]=-2;
    fin.close();
}
void bordare()
{
    for(i=1;i<=n;i++)
        A[i][0]=A[i][n+1]=-1;
    for(i=1;i<=n;i++)
        A[0][i]=A[n+1][i]=-1;
}
void initializare()
{
    x.l=x1;
    x.c=y1;
    x.d=1;
    A[x1][y1]=1;
    C[IncC]=x;
}
void Lee()
{
    //algoritmul lui Lee
    while(IncC<=SfC)  //parcurgem
    {
        x=C[IncC++];
        for(k=0;k<4;k++)
        {
            y.l=x.l+dx[k];
            y.c=x.c+dy[k];
            if(A[y.l][y.c]==0) //poz libera
            {
                y.d=x.d+1;
                A[y.l][y.c]=y.d;
                C[++SfC]=y; //duc y in C
            }
            if(A[y.l][y.c]==-2) //sfarsit
            {
                y.d=x.d+1;
                A[y.l][y.c]=y.d;
                C[++SfC]=y; //duc y in C
                if(y.d<=mini) mini=y.d;
            }
        }
    }
}
int main()
{
    citire();
    bordare();
    initializare();
    Lee();
    fout<<mini;
    return 0;
}