(演算法)廣度尋路

2022-06-20 16:09:13 字數 1802 閱讀 3314

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;

19struct mypathnode;

24//

判斷point點在地圖中 是否可以通行,是否可以被訪問

25bool ischeckpoint(mypos const&point, pathdata parr[map_col])

34return

ischeck;35}

3637

intmain(),

40 ,

41 ,

42 ,

43 ,

44

45};

46 pathdata patharr[map_row][map_col];//

尋路輔助陣列

47for(int i = 0; i < map_row; ++i)53}

54 mypos beginpos = ; //

尋路起點座標

55 mypos endpos = ; //

尋路終點座標

56 patharr[beginpos.row][beginpos.col].isfind = true;//

起點標記為已訪問

5758

//定義根節點

59 mypathnode *proot =null;

60 proot = new

mypathnode;

61 proot->pos =beginpos;

62 proot->pparentnode =null;

6364

//定義乙個正準備搜尋的指標陣列,把根節點壓入這個搜尋的序列

65 vectornodelist;

66nodelist.push_back(proot);

6768

//定義乙個下次待搜尋的指標陣列,用來儲存當前節點的所有子節點

69 vectortempnodelist;

70 mypos temppos;//

臨時座標,用來記錄待搜尋節點的座標,用來判斷在這個座標能否通行

7172

while(true)//

迴圈都少層數找到終點,或者沒有路徑

7392

if(ischeckpoint(temppos, patharr))

108break

;109

} 110

}111

}112

if(isfind) break

;113

}

114if(isfind) break

;115

if(tempnodelist.size() == 0) break;//

證明沒有路, 結束死迴圈

116 nodelist =tempnodelist;

117tempnodelist.clear();

118}

119while(1

);120

121return0;

122 }

廣度優先尋路演算法

廣度優先遍歷,是一種非啟發式 不用預處理的尋路演算法。通常會將整個圖全部遍歷,意圖尋找終點。從起點開始,每次所有符合的點全部遍歷,類似於擴散的樣子。一般情況,廣度優先遍歷演算法都是基於佇列結構,先進先出的遍歷所有節點。該尋路演算法,通常先將起點加入佇列結構,然後將該點周邊符合要求 未加入佇列結構並且...

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

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

A 尋路演算法

問題 由於遊戲中尋路出了個小問題 玩家尋路到乙個死角後在那邊不停的來回跑,就是無法越過障礙物,就研究了下a 尋路演算法以解決這個問題 研究了幾天,自己寫了個demo這裡給出總結 原理 a 演算法給出的是權值最優的路徑而不是最短路徑 權值有f g h來表示 啟發式函式如下 f p g p h p h值...