这是一段代码。我不确定最后一行的if语句是如何工作的?如果A [n - 1,j] == x'它没有布尔表达式,如'或类似的东西。有人可以解释一下它对我的影响吗?感谢
Connected(A[0..n − 1, 0..n − 1])
//Input: Adjacency matrix A[0..n − 1, 0..n − 1]) of an undirected graph G
//Output: 1 (true) if G is connected and 0 (false) if it is not
if n = 1 return 1 //one-vertex graph is connected by definition
else
if not Connected(A[0..n − 2, 0..n − 2]) return 0
else for j ←0 to n − 2 do
if A[n − 1, j] return 1
return 0
答案 0 :(得分:0)
if A[n−1, j] == 1
相当于if A[n-1,j]
附属矩阵通常有一个&零,是&没有或真实& false - 只有2个可能的值 - 基本上每个元素都有(某种)布尔值,表示2个顶点是否连接。此外,这是伪代码,它没有那么多“工作”的功能,但更多的是以人类可读(和简单)的术语传达算法。
答案 1 :(得分:0)
它调用一个返回布尔值(0或1)的A函数,这就是它的工作原理。
然后,当您的代码执行A[n − 1, j]
时,它将调用A函数,这是您在那里定义的函数,它将(最终)返回您的布尔值
这是一个递归函数。你会看到很多它们并且最终理解它。实际上,很简单,它是一个多次调用自身的函数,每个函数都有不同的参数,直到其中一个调用真正返回一个结果,该结果一直传递回所有函数链
答案 2 :(得分:0)
这取决于,因为伪代码没有严格定义,所以有多种可能的含义。
if A[n-1,j]
可以等同于(假设数字类型)if A[n-1,j] == 1
或if A[n-1,j] != 0
或(假设布尔类型)if A[n-1,j] == true
。对于邻接矩阵(由二进制真/假或0/1数据组成),这些可能性可能是等价的。
答案 3 :(得分:0)
您的算法将邻接矩阵缩减为单个节点(n = 1)的子图。在这个基本案例之后,它通过检查" hole"来确定您是否有连接图。使用循环。
在这个循环中,您正在检查是否有一个"孤立节点" (整行在邻接矩阵中为零)。 从单个节点构建,您可以转发链以查看图表是否已连接。 注意,在无向图中,当您从基本案例中检查时,如果图形未完全连接,您将发现断开连接的节点。即使它可能附加到另一个节点 - 它也将是附加到您尚未包含在搜索中的节点。
else
for j← 0 to n− 2 do //we hit the base case, now forward-chain from single node
if A[n− 1, j]//traverse the whole row (i.e. "is this node connected to anything else?")
return 1 //there's a connection, we can return
return 0 // if ALL zeros in adjacency matrix, you have an orphaned node

希望有所帮助! :)
澄清 - if语句有点含糊不清。对我来说,只有在检查全部零的整个行(j
索引)时,算法才会完成。这是您返回false的情况。如果与前一个节点建立了单一连接,您可以导入("前向链接")并继续搜索。
干杯,
-Gabe
P.S。 对于检查完全空行的嵌套for循环,这很容易阅读。