bfs解決最短路問題

2021-09-27 11:20:16 字數 1768 閱讀 6698

寬度優先搜尋按照開始狀態由遠及近的順序進行搜尋,因此很容易地用來求最短路徑、最少操作之類問題的答案。

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...