e : 獲取所有鑰匙的最短路徑
time limit:2 sec memory limit:128 mib
back submit edit
description
給定乙個二維網格 grid。
「.」 代表乙個空房間, 「#」 代表一堵牆, 「@」 是起點,(「a」, 「b」, …)代表鑰匙,(「a」, 「b」, …)代表鎖。
我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。
如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。
假設 k 為鑰匙/鎖的個數,且滿足 1 <= k <= 6,字母表中的前 k 個字母在網格中都有自己對應的乙個小寫和乙個大寫字母。
換言之,每個鎖有唯一對應的鑰匙,每個鑰匙也有唯一對應的鎖。
另外,代表鑰匙和鎖的字母互為大小寫並按字母順序排列。
輸出獲取所有鑰匙所需要的移動的最少次數。如果無法獲取所有鑰匙,返回 -1 。
input
整數n, m,代表grid的行、列 (1 ≤ n,m ≤ 30)
以下為n*m的矩陣
output
獲取所有鑰匙所需要的移動的最少次數
sample input
###.#
b.a.b
sample output
8more info
輸入:3 5
@…aa
…b#.
…b輸出:
#include
#include
#include
using namespace std;
char grid[35]
[35];
//用於儲存地圖
bool vis[35]
[35][
65];//用true判斷該位置持有的鑰匙組合狀態
struct state};
int sx=-1
,sy=-1
;//用於記錄初始位置
int tostate=0;
//用狀態壓縮儲存拿到所有鑰匙的狀態
int next[4]
[2]=
;int n,m;
intbfs()
}}}return-1
;}intmain()
} cout<<
bfs(
)
}
獲取所有鑰匙的最短路徑
description 給定乙個二維網格 grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無...
LeetCode 864 獲取所有鑰匙的最短路徑
給定乙個二維網格grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。假設 k 為鑰匙...
864 獲取所有鑰匙的最短路徑
題目描述 給定乙個二維網格 grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。假設...