寬度優先搜尋按照開始狀態由遠及近的順序進行搜尋,因此很容易地用來求最短路徑、最少操作之類問題的答案。
7-6 迷宮尋路
給定乙個m行n列的迷宮圖,其中 "0"表示可通路,"1"表示障礙物,無法通行。在迷宮中只允許在水平或上下四個方向的通路上行走,走過的位置不能重複走。
5行8列的迷宮如下:
0 1 1 1 0 0 0 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 0
0 1 1 1 0 1 1 0
1 0 0 0 0 0 0 0
則從左上角(1,1)至右下角(5,8)的最短路徑為:
1,1--》2,1--》2,2--》2,3--》3,3--》3,4--》3,5--》4,5--》5,5--》5,6--》5,7--》5,8
題目保證每個迷宮最多只有一條最短路徑。
請輸出該條最短路徑,如果不存在任何通路,則輸出"no found".
第一行,輸入m和n值,表示迷宮行數和列數。
接著輸入m行數值,其中,0表示通路,1表示障礙物。每列數值用空格符間隔。
接下來可能輸入多組迷宮資料。
當輸入m的值為-1時結束輸入。
按行順序輸出路徑的每個位置的行數和列數,如 x,y
如果不存在任何路徑,則輸出"no found".
每組迷宮尋路結果用換行符間隔。
在這裡給出一組迷宮。例如:
8 8
0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0
0 0 0 0 1 1 0 0
0 1 1 1 0 0 0 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 0
0 1 1 1 0 1 1 0
1 0 0 0 0 0 0 0
4 4
0 0 1 0
0 0 0 0
0 0 1 1
0 1 0 0
-1 -1
在這裡給出相應的輸出。例如:
1,1
2,13,1
4,15,1
5,25,3
6,36,4
6,57,5
8,58,6
8,78,8
no found
ac**:
#include #include #include #include #include using namespace std;
const int n = 200;
int m,n;
int g[n][n],visited[n][n];
struct node
node(int x,int y)
};node pre[n][n];
int x=;
int y=;
bool flag;
bool judge(int x,int y)
void bfs());
while(!q.empty())
else);
pre[x][y]=temp;}}
}}
}int main()
printf("1,1\n");
while(!s.empty())
printf("\n");
}else printf("no found\n");
}return 0;
}
BFS最短路徑記錄問題的解決(python)
廣度優先遍歷 常用的解決無權重最短路徑問題方法,其核心在於使用佇列 先進先出 的特點,能快速找到最靠近起始節點的目標節點。問題 由於各節點順序進隊出隊,在查詢到目標節點後很難追溯最短路徑。解決方案 參考dijkstra演算法,額外增加parents雜湊表,記錄下能使入隊節點被最早發現的父節點,即當節...
BFS 迷宮問題(求最短路)
題目 給定乙個大小為 n m 的迷宮。迷宮由通道和牆壁組成,每一步可以向鄰接的上下左右四格 的通道移動。請求出從起點到終點所需的最小步數。請注意,本題假定從起點一定可以移動 到終點。限制條件 bfs 迷宮問題自己寫 created by showlo on 2018 4 13.include inc...
迷宮最短路徑問題 bfs
問題 求起點到終點的最小步數 分析 廣搜按照距開始狀態由近及遠的順序進行搜尋,因此很容易地來求最短路徑 最小操作之類問題的答案。include include include includeusing namespace std const int inf 10000000 typedef pair...