我有一个有向图,看起来有点像这样。所有边都是单向的,存在循环,有些节点没有子节点。
我想要一个遍历算法,目标是在图中的任意位置找到一条长度为n个节点的路径。该算法应该执行以下操作:
我不确定是否已经存在这样的算法。大多数搜索算法似乎都在处理寻找最短路径、MST,并且不能访问相同的节点。对于我的需求,像A*和Dijkstra这样的寻路算法似乎过于复杂。我可能需要其中一个的修改版本,但不确定到底使用哪个。
我会使用Node和Edge的每个节点跟踪所有连接边缘。Edges便宜地跟踪边缘长度的长度和它连接到的节点。
class Node(object):
def __init__(self, identity):
self.id = identity
self.edges = set()
def __str__(self):
return f"node <id: {self.id}, edges: {self.edges}"
__repr__=__str__
class Edge(object):
def __init__(self, _from, to, length=1):
_from.edges.add(self)
self.to = to
self.len = length
def __str__(self):
return f"edge <length: {self.len}, to: {self.to}"
def __repr__(self):
return f"edge <length: {self.len}>"
也不愿找一条这样长度的路
def getPathOfLength(nodes, length):
for node in nodes:
path = subGetPathOfLength(node, length)
if not path is None:
return path
def subGetPathOfLength(node, length):
if length==0:
return []
for edge in node.edges:
path = subGetPathOfLength(edge.to,
length-edge.len)
if not path is None:
return [node] + path
return None
在像这样创建连接图之后
nodes = []
for idx in range(8):
nodes.append(Node(idx))
edges = []
edges.append(Edge(nodes[0], nodes[3]))
edges.append(Edge(nodes[3], nodes[4]))
edges.append(Edge(nodes[4], nodes[0]))
edges.append(Edge(nodes[7], nodes[0]))
edges.append(Edge(nodes[6], nodes[7]))
edges.append(Edge(nodes[2], nodes[6]))
edges.append(Edge(nodes[2], nodes[3]))
edges.append(Edge(nodes[1], nodes[3]))
edges.append(Edge(nodes[3], nodes[5]))
听起来你只是想要一个简单的递归算法。这里有一些基本的伪代码。
find_path(node, n):
if n == 1:
yield [node]
return
for each child of node n:
for each path in find_path(child, n - 1):
yield [node] + path
我需要为一组有向无环图找到从节点 0 开始的最长路径。我正在使用维基百科中的最长路径问题算法。我已经让算法适用于大多数图形,但对于其他图形,它没有给出正确的结果。算法为: 图形实现使用邻接列表来存储图形。如果我传递一个图,例如: 我得到的答案5,这是正确的。但是,如果我通过图表: 然后我得到2,而正确答案应该是3。 我使用的TopSort2算法是: DFS 算法包括:
输入: 生成的树: 输出: 规则: < li >输入代码总是会产生一个有向无环图 < li >每个节点都有一些wait_time值 < li >完整的图形遍历应该计算整个图形的总等待时间 < li >必须并行遍历所有独立节点(或者至少时间计算应该是这样) < li >如果两个不同节点的wait_time发生重叠,则将考虑最大值,遍历时间较短的节点将移动到下一个独立节点 < li >除了根和叶(可以
我有一个任务,我必须写一个方法,执行有向图的DFT。以下是有向边: 节点2-->节点4 节点3-->节点5 节点4-->节点5
问题内容: 有没有办法遍历classpath中的所有类? 我想对实现特定接口的某些类进行一些反思性检查,但是我想完全动态地进行检查,而无需输入任何要检查的类,只需浏览类路径即可。 问题答案: 该思考图书馆可以帮助解决这个问题。正如其他人所述,在所有类加载情况下也不是完全可能的,但是如果您只有jar和文件,那么它将可靠地做到这一点。
我正在MST上的CLRS中尝试ch23,这里有一个问题: 给定一个图G和一个最小生成树T,假设我们减少不在T中的一条边的权重。给出了在修改图中求最小生成树的算法。 我找到的一个解决方案是在中添加此新更改的边,然后在T中创建一个简单的循环,遍历此循环并删除此循环中的最大权重边,瞧,找到了新更新的MST! 我的问题是,如何在这个简单循环中只遍历节点?因为如果我在中从这个新添加的边的一个endpoint
我是C语言的新手。我已经开始使用向量,并且注意到在我看到的所有通过索引迭代向量的代码中,循环的第一个参数总是基于向量的。Java我可能会使用ArrayList做这样的事情: 我在C语言中看不到这一点有什么原因吗?是不好的做法吗?