我有一个关于图形中接收器检测的 Pascal 实现。这是代码:
FUNCTION KATAVOTHRA (A:MATRIX; N:INTEGER): INTEGER;
VAR
I,J,K,S:INTEGER;
BEGIN
KATAVOTHRA:=0;
I:=1;
WHILE (KATAVOTHRA=0 AND I<N) DO {1}
BEGIN
J:=1;
WHILE (A[I,J]=0 AND J<N) DO J:=J+1; {2}
IF (J=N) THEN BEGIN
S:=0;
FOR K:=1 TO N DO S:=S+A[K,I];
IF (S=N-1) THEN
KATAVOTHRA:=1;
END;
I:=I+1;
END;
END;
假设我们有以下邻接矩阵:
0 0 1
1 0 1
0 0 0
对于V1
,V2
和V3
顶点。(如果我们在两个节点之间有连接,则为 1 个代码,否则为 0 个代码)。
我正在尝试使用此输入跟踪代码,但我不能。原因是我3岁的时候不取结果。让我们看看我到目前为止做了什么:(KATAVOTHRA
是sink的名称)。
BEGIN with I:=1; and J:=1
(在第一个 while 循环内)
首先我们检查A[1,1]
是否为零并且它是(当然为了继续,1 < 3)所以J= J+1 => J=2
A[1,2]
也为零,所以再次增加 J,现在 J 为 3。3 不小于 3A[1,3]
且不为 0。所以我们要去 IF 语句IF( J = N) => IF( 3 = 3 ) then S=0 (sum)
,所以我们要去 FOR 循环,我们总结A[1,1] + A[2,1] + A[3,1]
IF( S = N-1) THEN
我们找到了一个水槽。但是这里S=1
不是 2。我们退出 FOR 循环,我现在是 2 再次WHILE(KATAVOTHRA=0 AND 2<3)
J 是 1,我们现在检查A[2,1]
但不是零,并且 2 不是 3,所以我们出去......我现在是 3......但是这次 3 < 3 是假的,所以整个循环在那里终止?我无法理解(尽管我在 Pascal lagnuage 方面没有太多经验)。
这有什么问题?