獲取所有鑰匙的最短路徑

2021-09-17 18:54:29 字數 1209 閱讀 6625

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 output
8
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 為鑰匙...