演算法 迷宮問題(寬搜)

2021-10-18 04:14:00 字數 1186 閱讀 7529

bfs不同於dfs,它不需要用到顯式的遞迴操作,而是將狀態儲存在佇列中,可以用來求權值為1的最短路。

每次都將隊首的元素取出,然後將可以由這個元素經過一步操作達到的放入隊尾。在最短路問題中只要到達過的節點,之後就不會再到達。

給定乙個n*m的二維整數陣列,用來表示乙個迷宮,陣列中只包含0或1,其中0表示可以走的路,1表示不可通過的牆壁。

最初,有乙個人位於左上角(1, 1)處,已知該人每次可以向上、下、左、右任意乙個方向移動乙個位置。

請問,該人從左上角移動至右下角(n, m)處,至少需要移動多少次。

資料保證(1, 1)處和(n, m)處的數字為0,且一定至少存在一條通路。

第一行包含兩個整數n和m。

接下來n行,每行包含m個整數(0或1),表示完整的二維陣列迷宮。

輸出乙個整數,表示從左上角移動至右下角的最少移動次數。

1≤n,m≤100

5 50 1 0 0 0

0 1 0 1 0

0 0 0 0 0

0 1 1 1 0

0 0 0 1 0

#include

#include

#include

using

namespace std;

const

int n =

110;

int m, n;

typedef

struct queuequeue;

queue q;

int map[n]

[n];

int flag[n]

[n];

int dir[4]

[2]=

;// 左右下上

intbfs()

else}}

return flag[n]

[m];

}// 寬搜

intmain()

}memset

(flag,-1

,sizeof flag)

; q.value[q.ed][0

]=1;

q.value[q.ed][1

]=1;

flag[1]

[1]=

0;cout <<

bfs(

)<< endl;

return0;

}

原題鏈結

寬搜 走出迷宮

描述 當你站在乙個迷宮裡的時候,往往會被錯綜複雜的道路弄得失去方向感,如果你能得到迷宮地圖,事情就會變得非常簡單。假設你已經得到了乙個n m的迷宮的圖紙,請你找出從起點到出口的最短路。輸入第一行是兩個整數n和m 1 n,m 100 表示迷宮的行數和列數。接下來n行,每行乙個長為m的字串,表示整個迷宮...

luogu P1141 01迷宮 寬搜

有乙個僅由數字0與1組成的n n格迷宮。若你位於一格0上,那麼你可以移動到相鄰4格中的某一格1上,同樣若你位於一格1上,那麼你可以移動到相鄰4格中的某一格0上。你的任務是 對於給定的迷宮,詢問從某一格開始能移動到多少個格仔 包含自身 輸入格式 輸入的第1行為兩個正整數n,m。下面n行,每行n個字元,...

5 逃離迷宮(bfs 寬搜 )

給定乙個m n m行,n列 的迷宮,迷宮中有兩個位置,gloria想從迷宮的乙個位置走到另外乙個位置,當然迷宮中有些地方是空地,gloria可以穿越,有些地方是障礙,她必須繞行,從迷宮的乙個位置,只能走到與它相鄰的4個位置中,當然在行走過程中,gloria不能走到迷宮外面去。令人頭痛的是,glori...