📜  门| Gate IT 2005 |第88章

📅  最后修改于: 2021-06-29 22:33:21             🧑  作者: Mango

Q84 Part_A
有向图中的汇点是一个顶点i,因此从每个顶点j≠i到i都有一条边,并且从i到任何其他顶点都没有边。具有n个顶点的有向图G由其邻接矩阵A表示,如果存在从顶点i指向j的边,则A [i] [j] = 1,否则为0。以下算法确定图G中是否存在凹陷。
i = 0
do {
    j = i + 1;
    while ((j < n) && E1) 
       j++;
    if (j < n) E2;
} while (j < n);

flag = 1;
for (j = 0; j < n; j++)
    if ((j! = i) && E3)
        flag = 0;

if (flag)
    printf("Sink exists");
else
    printf ("Sink does not exist");

为E 1和E 2选择正确的表达式

(A) E1:A [i] [j]和E2:i = j;
(B) E1:!A [i] [j]和E2:i = j + 1;
(C) E1:!A [i] [j]和E2:i = j;
(D) E1:A [i] [j]和E2:i = j + 1;答案: (C)
说明:要使顶点i成为汇点,从i到任何其他顶点都不应有边。

下沉

根据有问题的输入,

A[i][j] = 1 means there is an edge from vertex i to j.
A[i][j] = 0 means there is no edge from i to j

为了使我沉没的一个节点,

A[i][j] should be 0 for all j 
A[j][i] should be 1 for all j.

上面的伪代码从i = 0开始检查每个顶点i是否有宿。它基本上检查i之后的每个顶点j是否有宿。伪代码的诀窍是,它不会检查j小于i的情况。该循环选择的i可能不会下沉。基本上可以确保我们不会忽略潜在的沉没。在do while循环之后,稍后检查i是否实际上是一个接收器。

顶点i是一个潜在的吸收点,而A [i] [j]为零
因此, E1:!A [i] [j]

如果以上条件为假,那么我就不是一个接收器。所有j 现在,下一个潜在的下沉可以是j。
因此, E2:i = j

因此,选项(C)是正确的。

这个问题的测验