LeetCode 841. 钥匙和房间(DFS/BFS)
生活随笔
收集整理的這篇文章主要介紹了
LeetCode 841. 钥匙和房间(DFS/BFS)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
文章目錄
- 1. 題目
- 2. 解題
- 2.1 DFS
- 2.2 BFS
1. 題目
有 N 個(gè)房間,開(kāi)始時(shí)你位于 0 號(hào)房間。每個(gè)房間有不同的號(hào)碼:0,1,2,…,N-1,并且房間里可能有一些鑰匙能使你進(jìn)入下一個(gè)房間。
在形式上,對(duì)于每個(gè)房間 i 都有一個(gè)鑰匙列表 rooms[i],每個(gè)鑰匙 rooms[i][j] 由 [0,1,…,N-1] 中的一個(gè)整數(shù)表示,其中 N = rooms.length。 鑰匙 rooms[i][j] = v 可以打開(kāi)編號(hào)為 v 的房間。
最初,除 0 號(hào)房間外的其余所有房間都被鎖住。
你可以自由地在房間之間來(lái)回走動(dòng)。
如果能進(jìn)入每個(gè)房間返回 true,否則返回 false。
示例 1: 輸入: [[1],[2],[3],[]] 輸出: true 解釋: 我們從 0 號(hào)房間開(kāi)始,拿到鑰匙 1。 之后我們?nèi)?1 號(hào)房間,拿到鑰匙 2。 然后我們?nèi)?2 號(hào)房間,拿到鑰匙 3。 最后我們?nèi)チ?3 號(hào)房間。 由于我們能夠進(jìn)入每個(gè)房間,我們返回 true。示例 2: 輸入:[[1,3],[3,0,1],[2],[0]] 輸出:false 解釋:我們不能進(jìn)入 2 號(hào)房間。來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/keys-and-rooms
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
2. 解題
2.1 DFS
class Solution { public:bool canVisitAllRooms(vector<vector<int>>& rooms) {bool visited[rooms.size()] = {false};dfs(visited, rooms, 0);for(int i = 0; i < rooms.size(); ++i){if(visited[i] == false)return false;}return true;}void dfs(bool *visited, vector<vector<int>> &rooms, int i){visited[i] = true;for(int key = 0; key < rooms[i].size(); ++key){if(!visited[rooms[i][key]])dfs(visited, rooms, rooms[i][key]);}} };2.2 BFS
class Solution { public:bool canVisitAllRooms(vector<vector<int>>& rooms) {bool visited[rooms.size()] = {false};queue<int> q;q.push(0);visited[0] = true;int key, roomID, i;while(!q.empty()){roomID = q.front();q.pop();for(i = 0; i < rooms[roomID].size(); ++i){key = rooms[roomID][i];if(!visited[key]){q.push(key);visited[key] = true;}}}for(int i = 0; i < rooms.size(); ++i){if(visited[i] == false)return false;}return true;} };總結(jié)
以上是生活随笔為你收集整理的LeetCode 841. 钥匙和房间(DFS/BFS)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: LeetCode 51. N皇后 / 5
- 下一篇: LeetCode 1383. 最大的团队