home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CyberMycha Extra 2005 February
/
CMycha022005.iso
/
Setup
/
path.txt
< prev
next >
Wrap
Text File
|
2001-12-05
|
3KB
|
123 lines
struct PozInfo
{
WORD X;
WORD Y;
};
const WORD komorka=20;
const WORD szer=640 div komorka-1;
const WORD wys=480 div komorka-1;
BYTE Mapa[szer+1,wys+1];
WORD LenMapa[szer+1,wys+1];
WORD LenWezly[501];
PozInfo WezlyPoz[501];
WORD i,j;
PozInfo PozycjaStart;
PozInfo PozycjaKoniec;
PozInfo Pos;
WORD NrWezla;
WORD NajkrotszaDroga;
WORD NajkrKrok;
PozInfo NajkrPos;
BYTE Step;
void Czysc()
{
for(int a=0;a<=szer;a++)
for(b=0;b<=wys;b++)
LenMapa [a,b]=0xFFFF;
}
void TworzWezel (int x,int y)
{
if((LenMapa[Pos.X+x,Pos.Y+y]==0xFFFF)&&(Mapa[Pos.X+x,Pos.Y+y]==0))
{
LenMapa [Pos.X+x,Pos.Y+y]=LenMapa [Pos.X,Pos.Y]+1;
WezlyPoz [NrWezla].X=Pos.X+x;
WezlyPoz [NrWezla].Y=Pos.Y+y;
LenWezly [NrWezla]=((Pos.X+x)-PozycjaKoniec.X)*((Pos.X+x)-PozycjaKoniec.X)+((Pos.Y+y)-PozycjaKoniec.Y)*((Pos.Y+y)-PozycjaKoniec.Y);
NrWezla++;
}
}
void Sprawdz (int x,int y)
{
if(LenMapa[Pos.X+x,Pos.Y+y]<NajkrKrok)
{
NajkrKrok=LenMapa[Pos.X+x,Pos.Y+y];
NajkrPos.X=Pos.X+x; NajkrPos.Y=Pos.Y+y;
}
}
void FindPath()
{
WezlyPoz [0]=PozycjaStart;
LenWezly [0]=(PozycjaStart.X-PozycjaKoniec.X)*(PozycjaStart.X-PozycjaKoniec.X)+(PozycjaStart.Y-PozycjaKoniec.Y)*(PozycjaStart.Y-PozycjaKoniec.Y);
LenMapa [PozycjaStart.X,PozycjaStart.Y]=0;
NrWezla=1;
do
{
NajkrotszaDroga=0;
for(int i=0;i<=NrWezla-1;i++)
if(LenWezly [i]<LenWezly[NajkrotszaDroga]) NajkrotszaDroga=i;
Pos=WezlyPoz[NajkrotszaDroga];
WezlyPoz [NajkrotszaDroga]=WezlyPoz [NrWezla-1];
LenWezly [NajkrotszaDroga]=LenWezly [NrWezla-1];
NrWezla--;
TworzWezel (0,-1); {góra}
TworzWezel (1,0); {prawo}
TworzWezel (0,1); {dóÆ}
TworzWezel (-1,0); {lewo}
TworzWezel (1,-1); {prawy-górny}
TworzWezel (1,1); {prawy-dolny}
TworzWezel (-1,1); {lewy-dolny}
TworzWezel (-1,-1);{lewy-górny}
}
while(((Pos.X!=PozycjaKoniec.X)&&(Pos.Y!=PozycjaKoniec.Y))||(NrWezla!=0));
if(NrWezla!=0)
{
Pos= PozycjaKoniec;
step=0;
while
(!((Pos.X==PozycjaStart.X)&&(Pos.Y==PozycjaStart.Y)))
do
{
Step++;
NajkrKrok := 0xFFFF;
Sprawdz (0,-1); {góra}
Sprawdz (1,0); {prawo}
Sprawdz (0,1); {dóÆ}
Sprawdz (-1,0); {lewo}
Sprawdz (1,-1); {prawy-górny}
Sprawdz (1,1); {prawy-dolny}
Sprawdz (-1,1); {lewy-dolny}
Sprawdz (-1,-1);{lewy-górny}
Pos=NajkrPos;
/*SetColor (6);
Circle (NajkrPos.X*komorka+komorka div 2,
NajkrPos.Y*komorka+komorka div 2,
komorka div 2-1);
Circle (NajkrPos.X*komorka+komorka div 2,
NajkrPos.Y*komorka+komorka div 2,
komorka div 2-2);*/
}
}
else {}
}
Begin
Czysc();
PozycjaStart.X=3; PozycjaStart.Y=10;
PozycjaKoniec.X=25; PozycjaKoniec.Y=6;
FindPath();
End.