我想检查我的加权图是否有负循环。对于使用bellman-ford算法,我们需要选择一个源节点,初始化所有其他距离为无穷大,如果顶点数为n,则开始放松n-1次。我的问题是,无法到达的节点将有无限的距离,在第n次迭代中也不会改变。所以对于一个不可达的负循环,我们得到了错误的输出。
def negative_cycle(adj, cost):
dist = [float('inf')] * n
prev = [None] * n
dist[0] = 0
for _ in range(n-1):
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
dist[v]=dist[u]+cost[u][i]
prev[v]=u
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
return 1
return 0
如果不关心最短路径,只想检测负循环,可以将所有顶点的初始距离设置为0。这与创建假想源s并将s连接到所有其他边权重为0的顶点具有相同的效果。
然后,您的代码将与下面的代码类似(可能,我不懂Python,因此我的语法可能不正确)。
def negative_cycle(adj, cost):
dist = [0] * n
prev = [None] * n
for _ in range(n-1):
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
dist[v]=dist[u]+cost[u][i]
prev[v]=u
for u, edges in enumerate(adj):
for i, v in enumerate(edges):
if dist[v]>dist[u]+cost[u][i]:
return 1
return 0
您应该为每个连接的组件运行它。为此,以获取顶点v
(在函数中,始终是顶点0
)的方式实现函数,然后实现循环,对于距离设置为无穷大的每个顶点,在该顶点上调用函数。
问题内容: 我正在实现是否有位图,那么它应该将图像从imageview保存到内部存储器,否则在应用程序的内部存储器中设置另一个位图。这是代码:_ 问题答案: 您可以按以下方式检查它: 只需检查Bitmap值,如下所示:
问题内容: 我知道我可以在地图迭代的, 并寻找钥匙,但是有没有更有效的方法来测试地图中钥匙的存在? 我在语言规范中找不到答案。 问题答案: 一线回答: 说明: Go中的语句可以同时包含条件和初始化语句。上面的示例同时使用: 初始化两个变量- 将从映射中接收“ foo”的值或从“零值”(在这种情况下为空字符串)接收值,并且将收到一个布尔值,如果在映射中实际存在“ foo” ,则该布尔值将设置为 计算
问题内容: 有什么方法可以检查一个集合是否包含一个或多个具有比使用contains循环两次更好的性能的值? 在其他意义上看起来像这样 问题答案: 循环的实现遍历每个元素并进行测试,因此调用两次 效率低下 。 您可以编写自己的循环,使用已编译的regex 模式同时检查两者,同时查找两个名称:
有一个任务从控制台得到N个数字,找到最长和最短的一个和他们的长度。任务并不难,工作正常,但我决定做一个检查,如果控制台输入与任务的条件相对应: 只有整数。 是精确的N个数字,而不是更多/更少。 我决定编写一个布尔方法isinputCorret(),它将使用扫描器并检查输入是否正确,但它不能正常工作。
我有一个项目,关于从URL获取XML文件,将其删除,提取数据,然后进行处理。此外,我正在使用用户输入创建URL。但是我需要检查URL是否包含要刮取的XML文件。有什么办法吗?那么基本上如何检查URL是否包含XML文件呢?
问题内容: 我有一个不断变化的xml模式(使用trang自动生成)。这些更改不是很详尽。从此架构中仅添加或删除一些元素。通过这种模式,我正在生成Java类(使用cxf),通过它们我将解组xml文档。 随着模式的更改,我的自动生成的Java类也会更改。同样,与模式一样,java类中的更改不是很大。例如,如果将元素say 添加到架构;一些相关的功能说了,并添加到自动生成的java类中。 现在,如何确定