如何在仅具有OV邻接矩阵的简单DAG中找到哪个顶点的度数等于v-1?

问题描述

我有一个简单的有向图,没有没有反平行边。我需要找到一种算法来确定该图是否包含具有 out-deg = | V | -1和in-deg = 0 的顶点。

此算法的输入只能是该图的邻接矩阵。并使用此邻接矩阵,我们需要在 O(| V |)中进行。

谢谢您的帮助。

解决方法

由于最多可以有一个这样的节点,因此可以通过迭代地消除候选对象来实现。

首先,将所有节点放入堆栈。我们将使用此堆栈来保留我们的候选人。

只要堆栈上至少有两个节点pq,请检查边(p,q)是否存在。如果存在,则q的度数不能为0,我们可以将其从堆栈中删除。如果它不存在,则p不能具有超出度的|V|-1,因此我们可以将其从堆栈中删除。因此,在每次检查之后,我们都会精确地删除一个候选项,这使我们可以在O(|V|)次检查后得出单个候选项。

现在,我们只需要检查邻接矩阵中相应的行和列,即可检查给定的入度和出度,这也可以在O(|V|)中进行。