日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

[Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]

發(fā)布時(shí)間:2023/12/10 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS] 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

【問(wèn)題描述】[中等]

【解答思路】

當(dāng) xx 號(hào)房間中有 yy 號(hào)房間的鑰匙時(shí),我們就可以從 xx 號(hào)房間去往 yy 號(hào)房間。如果我們將這 nn 個(gè)房間看成有向圖中的 nn 個(gè)節(jié)點(diǎn),那么上述關(guān)系就可以看作是圖中的 xx 號(hào)點(diǎn)到 yy 號(hào)點(diǎn)的一條有向邊。

這樣一來(lái),問(wèn)題就變成了給定一張有向圖,詢問(wèn)從 00 號(hào)節(jié)點(diǎn)出發(fā)是否能夠到達(dá)所有的節(jié)點(diǎn)。

用visit數(shù)組或者Set記錄已經(jīng)訪問(wèn)的節(jié)點(diǎn)

1. DFS

使用深度優(yōu)先搜索的方式遍歷整張圖,統(tǒng)計(jì)可以到達(dá)的節(jié)點(diǎn)個(gè)數(shù),并利用數(shù)組 vis 標(biāo)記當(dāng)前節(jié)點(diǎn)是否訪問(wèn)過(guò),以防止重復(fù)訪問(wèn)。
復(fù)雜度

class Solution {boolean[] vis;int num;public boolean canVisitAllRooms(List<List<Integer>> rooms) {int n = rooms.size();num = 0;vis = new boolean[n];dfs(rooms, 0);return num == n;}public void dfs(List<List<Integer>> rooms, int x) {vis[x] = true;num++;for (int it : rooms.get(x)) {if (!vis[it]) {dfs(rooms, it);}}} }
2. BFS

用廣度優(yōu)先搜索的方式遍歷整張圖,統(tǒng)計(jì)可以到達(dá)的節(jié)點(diǎn)個(gè)數(shù),并利用數(shù)組 vis /Set標(biāo)記當(dāng)前節(jié)點(diǎn)是否訪問(wèn)過(guò),以防止重復(fù)訪問(wèn)。
復(fù)雜度

class Solution {public boolean canVisitAllRooms(List<List<Integer>> rooms) {int n = rooms.size(), num = 0;boolean[] vis = new boolean[n];Queue<Integer> que = new LinkedList<Integer>();vis[0] = true;que.offer(0);while (!que.isEmpty()) {int x = que.poll();num++;for (int it : rooms.get(x)) {if (!vis[it]) {vis[it] = true;que.offer(it);}}}return num == n;} } public boolean canVisitAllRooms(List<List<Integer>> rooms) {Stack<Integer> a = new Stack<>();HashSet<Integer> set = new HashSet<Integer>();set.add(0);a.add(0);while(!a.isEmpty()){int i =a.pop();for(int j:rooms.get(i)){if(!set.contains(j)){a.add(j);set.add(j);if (rooms.size() == set.size()) return true;}}}return (rooms.size() == set.size()) ;}

【總結(jié)】

1. DFS 遞歸回溯 BFS 隊(duì)列
2.審題!!! 思考后再行動(dòng)

轉(zhuǎn)載鏈接:https://leetcode-cn.com/problems/keys-and-rooms/solution/yao-chi-he-fang-jian-by-leetcode-solution/

總結(jié)

以上是生活随笔為你收集整理的[Leetcode][第841题][JAVA][钥匙和房间][DFS][BFS]的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。