是否有人知道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,我会将报纸发给您。
答案 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
是什么意思?
这声明了一个表示true
或false
值的局部变量,类似于Java的boolean
。
logical procedure CIRCUIT (integer value v);
这声明了一个名为CIRCUIT
的子程序,它有一个由值传递的整数参数v
。子程序返回logical
结果true
或false
,CIRCUIT := f
分配f
作为结果。在Java中,
boolean circuit(int v) {
boolean f;
...
f = false;
...
return f;
}
关键字begin
和end
分隔可嵌套的块范围,因此CIRCUIT
嵌套在主块中,UNBLOCK
嵌套在{{1}内}}。 CIRCUIT
是作业; :=
是¬
; not
是元素; ∈
是空的; ∅
是≠
; !=
和stack
建议unstack
和push
。
这只是一个开始,但我希望它有所帮助。
附录:经过反思,pop
和A
必须是同构的。
这是非常文字的大纲。我对B
,A
& B
选择比数组更好的数据结构。
V
答案 1 :(得分:1)
您可以在github上找到此算法的Java实现:https://github.com/1123/johnson。它使用Jung2 java图形库。