BFS解迷宮問題(Go實現)

2022-07-18 02:36:14 字數 1553 閱讀 4243

改了現有的c++**而來的,所以說實話並不滿意。

廣度優先搜尋(又稱廣度優先搜尋,簡稱bfs,以下簡稱廣度搜尋)是連通圖的遍歷策略。它之所以被命名是因為它的思想從乙個頂點v0開始,並在其周圍的乙個廣域範圍內徑向傳播。最直觀的經典例子之一就是在迷宮中行走。我們從頭開始,尋找到終點的最短路徑。許多最短路徑演算法都是基於廣度優先的思想。

染色法解題:

初始節點均為白色。起點變為灰色並加入佇列q。重複以下操作:

將灰色節點染黑,將四周節點染灰並加入佇列,直至給終點染色。

此時可得路徑。

package main

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