我想在图表中搜索一些路径。图表有周期,它们经常发生。
把旧的谜语带回画房子而不用笔和画两次相同的边缘。
^
/ \
/ _ \
|\ /|
| x |
|/_\|
它有5个顶点和8个边。让我们说我想检查是否可以绘制这样的图形而不用“拿笔”,给定起始顶点。请注意,我可以(并且可能需要)处理具有不同地图状态的相同顶点(是使用的边缘?)几次。在运行BFS / DFS时,是否必须为每个节点制作整个边缘使用数组的副本?有没有简单的方法可以做到这一点?
答案 0 :(得分:1)
对于DFS,您只需要在边缘访问标记。您无需复制它,只需在通话后重置它即可。
的伪代码:
for each node
for each edge
edge.visited = false
dfs(node)
dfs(node)
// do something with node?
// perhaps check numberOfEdges == visited.size() to see if we're done
for each edge in node
if (!edge.visited)
edge.visited = true
dfs(edge.other(node))
edge.visited = false
答案 1 :(得分:0)
让我们说我想检查是否有可能在没有“拿笔”的情况下绘制这样的图形,并给出起始顶点。
如果未连接图形,则无法绘图。否则,如果图形没有奇数degree的顶点,则无论您从哪个顶点开始,都是可能的。如果它有两个这样的顶点,则当且仅当给定顶点具有奇数度时才有可能。如果它有两个以上奇数度的顶点,则不可能。
我想在图表中搜索一些路径。
如果可以进行绘图(参见上文),只要剩余边连接,就会执行任何路径。