假設下圖是中國傳統的象棋棋盤的一部分:
在象棋中,「馬」走「日」的規則,如上圖,一同是以上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...