廣度搜尋的應用例項

2021-07-04 06:16:58 字數 1164 閱讀 8420

假設下圖是中國傳統的象棋棋盤的一部分:

在象棋中,「馬」走「日」的規則,如上圖,一同是以上8個方向,紅色的旗子是「馬」要攻擊的物件,請找出攻擊的最短路徑的步數

下面2個箭頭所指的路徑都是到達紅色目標的路徑(當然也許並不是最短路徑)

要求輸入:

m, n        //m代表一共有多少行,n代表一共有多少列

startx srarty endx endy

例如:9 9            //表示是乙個9*9的矩陣

3 5 2 8     //分別表示起點的橫座標,縱座標和終點的橫座標縱座標

要求輸出達到攻擊點的最短步數:

分析:本題採用廣度搜尋的方法去遍歷,一層一層向外擴散,一旦到達了紅色目標的座標,則廣度搜尋結束。

首先根據象棋裡「馬走日」的規則,一共有八個方向。所有用個2維陣列去記錄這8個方向。

direction[8][2]=,,,,,,,};

再用乙個二維陣列記錄遍歷到的點,這個點包括x座標,y座標以及步數。

即這個陣列的基本形式是visit[3];第二維分別記錄x座標,y座標以及步數。

分別用head和tail游標指向visit陣列的頭節點和尾節點,head座標表示的其實是某乙個父節點。把從該父節點出發,滿足條件的點,全部加入到佇列中,等到全部加完以後,移動head節點,指向下乙個節點,找下個父節點,如此往復迴圈,知道head等於tail的時候。

詳細**:

#include

using namespace std;

//預設乙個100*100的棋盤

int array[100][100];

int answer;

int m, n;

int endx, endy;

int direction[8][2] = ,,,,,,, };

//游標分別指向visit陣列的頭部和尾部

int head, tail;

int visit[10000][3];

void bfs()

int main()

廣度優先搜尋Python例項及注釋

廣度優先搜素python例項及注釋 例子 你是乙個種橘子的,而你要在你的朋友或朋友的朋友中找到橘子商人,從而把橘子賣出去。概念 你和你的朋友是一度關係,也就是靠近你的第一層關係,關係較近。你的朋友的朋友是你的二度關係。廣度優先搜尋 在本例子中就是先在一度關係中找橘子商人,找到就結束,如果一度關係沒找...

廣度優先搜尋 BFS 的原理和應用

廣度優先搜尋 bfs 的原理和應用 二叉樹中的層序遍歷就屬於一種 bfs board first search 層序遍歷會得到 abcdefg 的層序優先序列 bfs序列 在層序遍歷過程中,可以注意到先訪問的節點的孩子節點必然先被訪問 如訪問了 後訪問 和 那麼 的孩子結點一定在 的孩子結點前被訪問...

搜尋 廣度優先搜尋

廣度優先搜尋一層一層地進行遍歷,每層遍歷都是以上一層遍歷的結果作為起點,遍歷乙個距離能訪問到的所有節點。需要注意的是,遍歷過的節點不能再次被遍歷。class solution,int shortestpathbinarymatrix vectorint grid length return 1 cl...