在图中使用循环寻路(使用每个边一次)

时间:2013-10-28 15:54:57

标签: java algorithm graph path-finding

我想在图表中搜索一些路径。图表有周期,它们经常发生。

把旧的谜语带回画房子而不用笔和画两次相同的边缘。

  ^
 / \
/ _ \
|\ /|
| x |
|/_\|

它有5个顶点和8个边。让我们说我想检查是否可以绘制这样的图形而不用“拿笔”,给定起始顶点。请注意,我可以(并且可能需要)处理具有不同地图状态的相同顶点(是使用的边缘?)几次。在运行BFS / DFS时,是否必须为每个节点制作整个边缘使用数组的副本?有没有简单的方法可以做到这一点?

2 个答案:

答案 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的顶点,则无论您从哪个顶点开始,都是可能的。如果它有两个这样的顶点,则当且仅当给定顶点具有奇数度时才有可能。如果它有两个以上奇数度的顶点,则不可能。

  

我想在图表中搜索一些路径。

如果可以进行绘图(参见上文),只要剩余边连接,就会执行任何路径。