理解Donald B. Johnson算法中的伪代码

时间:2010-05-25 21:14:09

标签: java algorithm graph cycle pseudocode

是否有人知道Donald B. Johnson's algorithm,它列举了定向图表中的所有基本电路(周期)?

我有他在1975年发表的论文,但我无法理解伪代码。

我的目标是用Java实现这个算法。

例如,我所遇到的一些问题是它引用的矩阵A k 是什么。在伪代码中,它提到了

Ak:=adjacency structure of strong component K with least 
    vertex in subgraph of G induced by {s,s+1,....n};

这是否意味着我必须实现另一个找到A k 矩阵的算法?

另一个问题是以下是什么意思?

begin logical f; 

线"logical procedure CIRCUIT (integer value v);"是否意味着电路程序返回逻辑变量?在伪代码中也有“CIRCUIT := f;”行。这是什么意思?

如果有人能将这个1970年代的伪代码翻译成更现代的伪代码,那将是很好的,所以我能理解它

如果您有兴趣提供帮助但找不到报纸,请发送电子邮件至pitelk@hotmail.com,我会将报纸发给您。

2 个答案:

答案 0 :(得分:7)

伪代码让人想起Algol,Pascal或Ada。

  

这是否意味着我必须实现另一个找到A k 矩阵的算法?

k 似乎是具有指定属性的输入值数组的列表。它可能与相应的adjacency matrix有关,但我不清楚。我猜是这样的:

int[][] a = new int[k][n];
int[][] b = new int[k][n];
boolean[] blocked = new boolean[n];
int s;
  

logical f是什么意思?

这声明了一个表示truefalse值的局部变量,类似于Java的boolean

  

logical procedure CIRCUIT (integer value v);

这声明了一个名为CIRCUIT的子程序,它有一个由值传递的整数参数v。子程序返回logical结果truefalseCIRCUIT := f分配f作为结果。在Java中,

boolean circuit(int v) {
    boolean f;
    ...
    f = false;
    ...
    return f;
}

关键字beginend分隔可嵌套的块范围,因此CIRCUIT嵌套在主块中,UNBLOCK嵌套在{{1}内}}。 CIRCUIT是作业; :=¬; not是元素; 是空的; ; !=stack建议unstackpush

这只是一个开始,但我希望它有所帮助。

附录:经过反思,popA必须是同构的。

这是非常文字的大纲。我对BA& B选择比数组更好的数据结构。

V

答案 1 :(得分:1)

您可以在github上找到此算法的Java实现:https://github.com/1123/johnson。它使用Jung2 java图形库。