廣度優先尋路演算法

2021-09-19 23:35:29 字數 1262 閱讀 9900

廣度優先遍歷,是一種非啟發式、不用預處理的尋路演算法。通常會將整個圖全部遍歷,意圖尋找終點。從起點開始,每次所有符合的點全部遍歷,類似於擴散的樣子。

一般情況,廣度優先遍歷演算法都是基於佇列結構,先進先出的遍歷所有節點。

該尋路演算法,通常先將起點加入佇列結構,然後將該點周邊符合要求(未加入佇列結構並且可以到達的點)的點全部再次加入佇列結構中,意圖下一次遍歷。一直迴圈該方法。直至全部遍歷或者找到終點。

**:

///

//廣度遍歷尋路演算法

struct stinfo

;stinfo buildstinfo(int iposx, int iposy, int ifposx = -1, int ifposy = -1)

bool islegalpos(int **pstar, int iposx, int iposy)

bool isinmaplist(std::vector&maplist, int iposx, int iposy)

return false;

}void insertlistablepos(std::vector&veclist, std::pair&posnow, std::pair&posend, int **pstar)

if (islegalpos(pstar, posnow.first, posnow.second-1) && !isinmaplist(veclist, posnow.first, posnow.second-1))

if (islegalpos(pstar, posnow.first + 1, posnow.second) && !isinmaplist(veclist, posnow.first + 1, posnow.second))

if (islegalpos(pstar, posnow.first, posnow.second+1) && !isinmaplist(veclist, posnow.first, posnow.second+1)) }

void printroad(std::vector&maplist, std::pairposend)

} if (posend.first == -1 && posend.second == -1)

break; }}

void findroadbfs(int **pstar, std::pair&posbegin, std::pair&posend)

if (posnow == posend)

else }

int main()

(演算法)廣度尋路

1 include 2 include 3 using namespace std 45 define map row 6 6 define map col 8 定義尋路地圖的大小,可以修改,自定義78 enum pathdir 11struct mypos 14struct pathdata 19...

廣度優先演算法 最佳優先演算法 A 演算法尋路程式

廣度優先演算法 最佳優先演算法 a 演算法尋路程式 c 廣度優先演算法 最佳優先演算法以及a 演算法原理上是比較相似的,均是通過佇列來尋找合適的路徑。breadthfs與bestfs是a 的特例,區別在於代價值f n 的計算。breadthfs 廣度優先演算法 佇列結點及地圖的設計 struct q...

迷宮尋路(A星尋路演算法)

題目 假設我們有乙個7 5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。解題思路 需要引入兩個集合和乙個公式,如下 具體步驟 把起點放入openlist 檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路...