- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在加深对 LeetCode 上无向图算法与无向图问题的理解。我意识到的关键区别在于像 841 Keys and Rooms 这样的问题。因为这是定向的,所以我需要将“0”节点添加到已见集。特别是早期的这一行:
seen_rooms.add(0)
另一方面,对于 547. Number of Provinces ,因为该图是无向的,所以我不需要“尽早”添加它。我本可以稍后将其添加到我的循环中
问题 547:
class Solution():
def findCircleNum(self, A):
#Finds your neighboring cities
seen_cities = set()
def find_cities(cur_city):
nei_cities = A[cur_city]
#First iter (0) nei city
#cur_city = 0
#find_cities (0) go through neighbors of 0
#Don't need to add b/c this is going through it each time so when 1 -> 2 we would have had 1 <- 2 as well
# seen_cities.add(cur_city)
for nei_city, can_go in enumerate(nei_cities):
if can_go == 1 and nei_city not in seen_cities:
seen_cities.add(nei_city)
find_cities(nei_city)
#Go a DFS on all neighboring cities
provinces = 0
for city in range(len(A)):
#We haven't visited the city
if city not in seen_cities:
# seen_cities.add(city)
find_cities(city)
#After the above DFS I would have found all neighboring cities and increase it's province by 1
#Then go onto the next one's
provinces += 1
return provinces
问题 841
class Solution:
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
#canvisitallrooms
#pos means you can visit such rooms
#This one is directed so u needa add it ahead of time
total_rooms = []
#When adding to the stack we needa add to seen as well
stack = [0]
seen_rooms = set()
seen_rooms.add(0)
#We never necessairly mentioned room 0 so we need to add room 0 since it STARTS there as well compared to another prob like 547
#[[1],[2],[3],[]]
while stack:
cur_room = stack.pop()
nei_rooms = rooms[cur_room]
for nei_room in nei_rooms:
if nei_room not in seen_rooms:
seen_rooms.add(nei_room)
stack.append(nei_room)
return len(seen_rooms) == len(rooms)
对于无向图可以这样做的原因,即不必像我上面所说的那样在早期将位置添加到可见的位置,是因为它是无向的,我们将再次访问这样的路径并且可以将它添加到已见集以防止我们再次看到它?而在像 key 和房间这样的有向图中,我们不会每次都“访问”房间 0 吗?
最佳答案
访问集的原因本质上是cycle回避,这在有向图中和无向图中都是一个问题。无向图只是有向图的一种特殊情况,其中从 A
到 B
的每条边都有从 B
到 A< 的相反边
,所以你可以有循环。在“provinces”中,邻接矩阵定义了每个节点的自循环。
为什么有时会提前初始化访问集,有时会晚一些?它与定向无关。它主要是与检查终端状态的位置有关的实现细节。例如,对于“ key 和房间”,以下两种解决方案均有效。只要在探索之前测试了先前的访问,并且在推送其邻居之前没有意外地标记为已访问,它几乎是一样的。
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
visited = set([0]) # <--
stack = [0]
while stack:
for key in rooms[stack.pop()]:
if key not in visited:
visited.add(key)
stack.append(key)
return len(visited) == len(rooms)
def canVisitAllRooms(self, rooms: List[List[int]]) -> bool:
visited = set()
stack = [0]
while stack:
i = stack.pop()
visited.add(i) # <--
for key in rooms[i]:
if key not in visited:
stack.append(key)
return len(visited) == len(rooms)
在“省份”上也是如此——只要您确保探索所有内容一次,您就可以移动检查并设置插入。
例如,我下面的解决方案(我在没有查看您的代码的情况下编写的)执行访问检查并在递归调用开始时标记访问过一次的根节点。您的版本进行两次检查,一次在遍历所有节点的主循环中进行,第二次在邻居循环中进行。
如果你真的想要,你可以更进一步,在递归调用之前在调用者中“启动”访问集,但这不是一个特别优雅的方法,因为它将更多的递归逻辑分散到两个地方。
def findCircleNum(self, adj_mat: List[List[int]]) -> int:
visited = set()
def explore(i):
if i not in visited:
visited.add(i)
for j, x in enumerate(adj_mat[i]):
if x:
explore(j)
return True
return len([i for i, _ in enumerate(adj_mat) if explore(i)])
关于python - 将已见集用于有向图与无向图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66130481/
有没有办法让文字不上下跳动?我不能使用position:absolute。因为它弄乱了我网站的其余部分。请看这个 fiddle :http://jsfiddle.net/9xn19111/11/ 这是
我正在尝试将文本“WE CREATE DANCE”“WE HAVE FUN”“WE LOOK GOOD”放置在一个容器内,该容器将根据文本的大小和文本的行数进行调整。容器的大小是未知的,因为它是动态的
我正在构建一个 Wasm 应用程序并编译它,我有一个 shell 脚本。 当我从终端手动运行它时,我有以下内容: /app/Go/assets$ ./script.compile.wasm.sh Wa
我正在关注 URL: https://software.intel.com/content/www/us/en/develop/documentation/get-started-with-intel
我想看到我在 Chrome 中悬停的 anchor 的 :hover 样式。在 Firebug 中,有一个样式下拉列表允许我为元素选择不同的状态。 I can't seem to find anyth
我刚刚尝试安装 git-flow,但是,它似乎没有与 git 正确集成,我该怎么做才能将 gitflow 与 git 集成?我可以手动执行此操作吗? 谢谢,杰弗里 [root@sa 2]# wget
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: “git pull” broken 在我的 MAC 上使用 git version 1.7.5.4 当尝试从
我连接了 bitbucket,我在我的电脑上安装了 Git 和 sourcetree,我尝试将 sourcetree 和 bitbucket 连接在一起。但我无法将两者联系起来。当我尝试克隆存储库源路
我设置了github for mac 现在我正尝试从终端使用 git 命令。 如果我尝试运行 git rebase 命令,我会收到以下消息 > cd /Applications/GitHub.app/
我正在尝试使用 git send-email 发送补丁,但我收到以下错误: git: 'send-email' is not a git command. See 'git --help'. 如何使
尝试按照说明从 docker 网站构建 docker 镜像。 https://docs.docker.com/examples/running_redis_service/ 这是我得到的错误,我会按照
当我尝试从本地文件中 pull 、克隆或推送某些内容时出现此错误。我尝试使用以下方法解决: Reupdating path variable to C:\Program Files\Git\cmd\g
我目前正在使用 Cloudera 5.6 尝试基于另一个表在 hive 表中创建 Parquet 格式表,但我遇到了错误。 create table sfdc_opportunities_sandbo
我在 visual studio 2010 中使用 git 进行源代码控制。我可以使用诸如“git status”、“git commit”之类的命令,但是当我尝试使用“git review”时,我得
如何解决“MacBook pro”上的此错误。 git: 'credential-wincred' is not a git command. See 'git --help'. git: 'cred
以下 java 8 流没有任何终端操作。下面这个块是不是应该是懒惰的,因为我只有中间操作,还没有被终端操作操作过。当我运行这个块时,我得到“流已经被操作或关闭”。见 https://ideone.co
我是一名优秀的程序员,十分优秀!