我了解“深度优先”迷宫加速算法,但我需要一些帮助来使用 Javascript 实现它。
我正在寻找以下问题的名称:旅行推销员问题(访问每个城市一次)但没有返回到开始城市和最后访问一个给定的城市.换句话说,我想指定起点和终点城市,我不想回到起点城市.谢谢!!!
我有一个有向图,除了离开源(S)的边之外,所有非负边.从源的任何其他顶点都没有边.要找到图中从源(S)到顶点(T)的最短距离,即使离开源的边是负的,我还能使用Dijkstra的最短路径算法吗?
Dijkstra的传统*实现并不能很好地处理这种情况.我想我已经提出了一些可行的解决方案,但它们并不是特别优雅**.这是标准解决方案的已知问题吗?
这是假设非平凡的解决方案,即类似A-> B-> C-> A的路径,而不仅仅是A-> A.
*当我说传统时,我的意思是将每个节点标记为已访问.
**存储每个节点的访问次数,并根据终端节点是否为起始节点的终止条件.
在流行的实现中,我们使用三个循环,循环变量说 i,j,k。这里 i 和 j 分别用于指示两个顶点的源和目的地,因此“k”代表“中间”顶点。如果我将循环与循环变量“k”放在第 3 位而不是第 1 位,我会得到错误的答案。为什么?
维基中完美匹配的概念:
完美匹配是匹配图的所有顶点的匹配。也就是说,如果图的每个顶点都与匹配的边相关,则匹配是完美的。
所以最小权重完美匹配是权重最小的组合之一。起初,我的想法是遵循贪心算法(注意:我的图是完整的,每个顶点都有到其余顶点的边):
从图中挑选一个顶点,并在每一步中找到它最近的邻居顶点,然后丢弃它们并循环直到图中没有顶点。然而,除非计算 n! 次:
while odd_vert:
v = vertices.pop()
length = float("inf")
closest = 0
for u in odd_vert:
if graph[v][u]["weight"] < length:
length = graph[v][u]["weight"]
closest = u
graph_minimum_match.add_edge(v, closest, weight = length)
Run Code Online (Sandbox Code Playgroud)
我在 networkx 中找到了一些函数,但它要求图形是二分的:
nx.algorithms.bipartite.matching.minimum_weight_full_matching(G, top_nodes=None, weight='weight')
Run Code Online (Sandbox Code Playgroud)
此外,找到最大的权重匹配:
nx.algorithms.matching.max_weight_matching(G, maxcardinality=True)
Run Code Online (Sandbox Code Playgroud)
然后,我搜索了一篇关于开花信仰传播的文章,但我不确定它是否可以实现,所以有什么想法吗?
图着色的实际应用是什么?换句话说,为什么我们需要使用这样的算法来优化颜色的数量(问题的一些重要特征).
作为对此(几乎)相同标题(Netlogo:计算图形/网络的直径)发布的问题的答案,用户 C.Bradley 确认:“我使用了两个 foreach 循环来计算一只海龟到其余海龟的路径”。我想问用户 C.Bradley 他是如何做到这一点的。注意:如果这不是问这个问题的正确方式,我很抱歉:我是 Stackoverflow.com 的绝对初学者(我本来想直接联系 C.Bradley,但我想这在平台上是不可能的,是吗?不是吗?)非常感谢。