Pagini recente » Cod sursa (job #1753933) | Cod sursa (job #6755) | Cod sursa (job #589897) | Cod sursa (job #2858784) | Cod sursa (job #1636342)
#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;
}