改了現有的c++**而來的,所以說實話並不滿意。
廣度優先搜尋(又稱廣度優先搜尋,簡稱bfs,以下簡稱廣度搜尋)是連通圖的遍歷策略。它之所以被命名是因為它的思想從乙個頂點v0開始,並在其周圍的乙個廣域範圍內徑向傳播。最直觀的經典例子之一就是在迷宮中行走。我們從頭開始,尋找到終點的最短路徑。許多最短路徑演算法都是基於廣度優先的思想。
染色法解題:
初始節點均為白色。起點變為灰色並加入佇列q。重複以下操作:
將灰色節點染黑,將四周節點染灰並加入佇列,直至給終點染色。
此時可得路徑。
package mainimport "fmt"
var (
map1 int // 地圖
haspassedarea int // 通過的地方 為0表示未通過
n, m int // 地圖長寬
sq sqqueue // 佇列表示的路徑
)type node struct
type sqqueue struct // 佇列
func findpath(x, y int) }}
fmt.print("最短路徑為:")
for i = pathlength - 1; i >= 0; i--
fmt.print("(", path[i].x, ",", path[i].y, ")")
}fmt.println()
return
} // 若沒有到達終點
// 嘗試向當前節點的四周染色
if now.x + 1 < n && map1[now.x + 1][now.y] != 0 && haspassedarea[now.x + 1][now.y] == 0
if now.x - 1 >= 0 && map1[now.x - 1][now.y] != 0 && haspassedarea[now.x - 1][now.y] == 0
if now.y + 1 < m && map1[now.x][now.y + 1] != 0 && haspassedarea[now.x][now.y + 1] == 0
if now.y - 1 >= 0 && map1[now.x][now.y - 1] != 0 && haspassedarea[now.x][now.y - 1] == 0
} fmt.print("無法到達終點\n")
}func main() , , }
haspassedarea = int , , }
m, n = 4, 3
fmt.println("迷宮為")
for i:= 0; i < len(map1); i++
fmt.println()
} var newnode node
newnode.x, newnode.y, newnode.lastx, newnode.lasty = 0, 0, -1, -1
sq.front, sq.rear = 0, 0
sq.base[sq.rear] = newnode
sq.rear++
findpath(0, 0)
}
DFS解迷宮問題(Go實現)
首先設定乙個地圖,s為起點,e為終點,為牆。定義個棧一般的路徑。開始遞迴 將旁邊的座標加入路徑 第一次為s所在的位置 判斷是否越界 重複 撞牆,若是則返回false到上次遞迴 判斷是否到達終點,若是則返回true到上次遞迴 若上述判斷均否,開始下一次遞迴,取得返回值 若得到的返回值均為false,說...
BFS解迷宮問題(經典BFS演算法)
問題描述 下圖給出了乙個迷宮的平面圖,其中標記為 1 的為障礙,標記為 0 的為可 以通行的地方。010000 000100 001001 110000 迷宮的入口為左上角,出口為右下角,在迷宮中,只能從乙個位置走到這 個它的上 下 左 右四個方向之一。對於上面的迷宮,從入口開始,可以按drrurr...
迷宮問題bfs
迷宮問題 採用佇列的廣度優先遍歷 bfs 思想是從乙個頂點v0開始,輻射狀地優先遍歷其周圍較廣的區域 找到的解為最優解 include define m 8 define n 8 define maxsize 1000 typedef struct box typedef struct qutype...