NCSTOJ 獲取所有鑰匙的最短路徑

2021-09-18 07:15:09 字數 1264 閱讀 4016

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

3 [email protected].#

###.#

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 代表鎖。我們從起點開始出發,一次移動是指向四個基本方向之一行走乙個單位空間。我們不能在網格外面行走,也無法穿過一堵牆。如果途經乙個鑰匙,我們就把它撿起來。除非我們手裡有對應的鑰匙,否則無法通過鎖。假設...