2013-02-18 81 views
-2

(A *)尋路只爲上,下(A *)尋路

,左,右

不管怎麼說,我不知道,我查了一些例子,但是,將它是這個樣子?:

Point StartTile; 
Point EndTile; 
List<Point> CheckedPoints; 
List<Point> UncheckedPoints; 

所以,我將在StartTile添加到UncheckedPoints

我會通過UncheckedPoints和循環添加(上,下,左,右)以瓷磚UncheckedPoints,如果它不是在CheckedPoints。並刪除我剛剛檢查的點,並將其添加到CheckedPoints

,直到我在UncheckedPoints,那麼究竟得到EndTile我會做一樣的嗎?

1如果我無法進入EndTile,它會永遠循環嗎?我怎樣才能防止這一點?

2如果我不能到達EndTile,有沒有辦法讓最接近的瓷磚到EndTile?

3我如何獲得從StartTile到EndTile的圖塊列表?爲每個循環保留一個長列表會佔用大量內存,對吧?

+0

我只需要問題3的答案,但其他兩個也會幫助我。 – user2066764 2013-02-18 18:08:39

+2

嗯,你說的是A *(發音爲A Star)?這是一種尋路算法,儘管只有其中的一種。 – delnan 2013-02-18 18:08:50

+1

是的,但我認爲A *是上,下,左,右,四角。我不想要角落,所以......我將它命名爲A +算法。無論如何,我需要幫助的是沒有角落的A *算法。固定 – user2066764 2013-02-18 18:12:02

回答

1

1如果我不能到達EndTile,它會永遠循環嗎?我怎樣才能防止這一點?

不,算法只應運行,只要有UncheckedPoints。一旦達到EndTile,您可以放棄,但這不是必需的。

你絕不能添加已經包含在CheckedPoints

2如果我不能得到的EndTile,有沒有辦法讓最接近平鋪到EndTile一個點UncheckedPoints?

是的,因爲您將所有訪問過的ppints存儲在CheckedPoints中,您可以選擇其中最近的點。

3我如何獲得從StartTile到EndTile的圖塊列表?爲每個循環保留一個長列表會佔用大量內存,對吧?

您可以存儲每個點,從哪個點訪問它。

這會增加所需內存的兩倍,但它不會成爲「內存負載」,因爲您已經必須存儲所有訪問點,以避免在循環中運行。

-

你可能想看看Dijkstra算法在網格上(未在圖上),這是簡單的。 A *只是一種優化,不能以一種隨機順序瀏覽所有標題,而是要首先瀏覽最接近結束標題的標題。

+0

謝謝,我想答案就在我面前。只是沒有想到這些。 – user2066764 2013-02-18 18:21:46