問題描述:第一行輸入兩個數,分別是迷宮的行數和列數,第二行輸入1和0,1表示可以走,0不能走輸出乙個數,表示迷宮的最少步數。
遇到的問題:向函式傳到二維陣列時,超過了的傳到二維陣列上限,1000時不行,100可以
思路:基於非遞迴的廣度搜尋,從入口處,用佇列收割入口位置的下標,把乙個位置的所有能走的下一步收到佇列裡面,下次佇列出去乙個元素,在出去的元素基礎上再收割新的元素。首個時候要判斷三個條件(這個位置是否在迷宮內部、這個位置是否走過了、這個位置是不是1,能不能走),根據這三個條件,我們要建立乙個佇列,乙個輔助陣列,乙個儲存0和1元素的陣列。
感想:搜尋一般都要建立乙個二維陣列或者兩個一維數組來儲存這三個值,為的使工作下標變化。
一般走迷宮的套路就是在乙個while迴圈裡面對每個滿足三個條件的下標測試,滿足就標記一下,不滿足的就不管。
#includeusing namespace std;
//判斷條件需要三個,乙個是座標是否在這個陣列內部,乙個是這個座標是否被走過,乙個是這個座標是否能走
//1能走;0是牆,不能走
struct nqueue[100];
int top=0;
int base=0;
int dx[4]=;//上下左右的座標移動
int dy[4]=;//上下左右的座標移動
void pop(int x,int y)
int empty()
void push(int &x,int &y)
int bfs(int nums[100][100],int d[100][100],int n,int m)
cout
}
馬走日 最小步數
題目描述 一匹馬在乙個8 8的棋盤上走著,它的每一步恰好走成乙個日字,也就是在x y兩個方向上,如果在乙個方向走一步,另乙個方向就走兩步。假設棋盤的下標左下角是 1,1 右上角是 8,8 給你馬的最初位置p1 a1,b1 最終位置p2 a2,b2 請你程式設計求出馬從最初位置到最終位置所走的最少步數...
使用BFS求最小步數
bfs寬度優先搜尋經常用於求最短路徑長度,許多的最短路徑演算法都是基於該思想。洪尼瑪今天準備去尋寶,在乙個n n n行,n列 的迷宮中,存在著乙個入口 一些牆壁以及乙個寶藏。由於迷宮是四連通的,即在迷宮中的乙個位置,只能走到與它直接相鄰的其他四個位置 上 下 左 右 現洪尼瑪在迷宮的入口處,問他最少...
BFS搜尋迷宮,求起點到終點的最小步數
給m n的矩陣,其中 表示可以行走,表示牆壁無法通過,s表示起點,t為終點。輸入m,n,以及符號矩陣,計算s到t的最短步數。示例輸入,5 5.s t 2 2 4 3 輸出 11 以下為 const int mazemaxsize 100 迷宮大小 struct mazemz 迷宮座標點 char m...