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
3 5
@.a.#
###.#
b.a.b
sample output8
more samples
輸入:
3 5
@..aa
..b#.
....b
輸出:
6
狀態壓縮記錄鑰匙狀態
#include
#include
#include
using namespace std;
struct state};
bool vis[35]
[35][
65];int totstate =0;
int next[4]
[2]=
;int n, m;
int sx =-1
, sy =-1
;char grid[35]
[35];
intbfs()
}}}return-1
;}intmain()
} cout <<
bfs(
)<< endl;
return0;
}
NCSTOJ 獲取所有鑰匙的最短路徑
e 獲取所有鑰匙的最短路徑 time limit 2 sec memory limit 128 mib back submit edit description 給定乙個二維網格 grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基...
864 獲取所有鑰匙的最短路徑
題目描述 給定乙個二維網格 grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。假設...
LeetCode 864 獲取所有鑰匙的最短路徑
給定乙個二維網格grid。代表乙個空房間,代表一堵牆,是起點,a b 代表鑰匙,a b 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。假設 k 為鑰匙...