这个if语句如何工作?它似乎没有布尔表达式

时间:2015-05-18 19:14:07

标签: arrays if-statement pseudocode

这是一段代码。我不确定最后一行的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

4 个答案:

答案 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] == 1if 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循环,这很容易阅读。