判断题
1.若图G有环,则G不存在拓扑排序序列。
2.若图G为连通图且不存在拓扑排序序列,则图G必有环。
3.拓扑序一定是唯一的。
选择题
1.对下图进行拓扑排序,可以得到不同的拓扑序列的个数是:
2.下图为一个AOV网,其可能的拓扑有序序列为:
| 选项 |
---|
A | ACBDEF |
B | ABCEFD |
C | ABCDFE |
D | ABCEDF |
3.在拓扑排序算法中用堆栈和用队列产生的结果会不同吗?
| 选项 |
---|
A | 是的肯定不同 |
B | 肯定是相同的 |
C | 有可能会不同 |
D | 以上全不对 |
4.设有向图有n个顶点和e条边,采用邻接表存储,进行拓扑排序时,时间复杂度为()。
| 选项 |
---|
A | O (nlog2e) |
B | O ( elog2n) |
C | O (e*n ) |
D | O (n+e) |
5.有拓扑排序的图一定是()。
6.判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用()。
| 选项 |
---|
A | 求最短路径的Dijkstra |
B | 求生成树的方法 |
C | 深度优先遍历算法 |
D | 宽度优先遍历算法 |
7.下列选项中,不是如下有向图的拓扑序列的是:
| 选项 |
---|
A | 1, 5, 2, 3, 6, 4 |
B | 5, 1, 2, 6, 3, 4 |
C | 5, 1, 2, 3, 6, 4 |
D | 5, 2, 1, 6, 3, 4 |
8.已知有向图G=(V,E),其中V = {V1,V2,V3,V4,V5,V6,V7},E = {<V1,V2>, <V1,V3>, <V1,V4>, <V2,V5>, <V3,V5>, <V3,V6>, <V4,V6>, <V5,V7>, <V6,V7>},G的拓扑序列是()。
| 选项 |
---|
A | V1,V2,V5,V3,V4,V6,V7 |
B | V1,V3,V4,V6,V2,V5,V7 |
C | V1,V3,V2,V6,V4,V5,V7 |
D | V1,V3,V4,V5,V2,V6,V7 |
9.设有图的数据逻辑结构 B=(K,R),其中顶点集 K={k1, k2,…,k9},有向边集 R={<k1,k3>,<k1,k8>,<k2,k3>,<k2,k4>,<k2,k5>,<k3,k9>,<k5,k6>,<k8,k9>,<k9,k7>,<k4,k7>,<k4,k6>}。以下哪个选项不是对应DAG图的拓扑序列?
| 选项 |
---|
A | k1,k2,k3,k4,k5,k6,k8,k9,k7 |
B | k2,k5,k1,k4,k6,k8,k3,k9,k7 |
C | k2,k4,k5,k6,k7,k1,k3,k8,k9 |
D | k1,k8,k2,k3,k9,k4,k7,k5,k6 |
10.在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是()。
| 选项 |
---|
A | G中有弧 |
B | G中有一条从Vi到Vj的路径 |
C | G中没有弧 |
D | G中有一条从Vj到Vi的路径 |
程序填空题
1.下列代码的功能是对一个给定的图G执行拓扑排序,其中TopNum[]从1开始记录拓扑序。
void Topsort( Graph G )
{
Queue Q;
Vertex V, W;
NodePtr ptr;
int counter = 0;
Q = CreateEmptyQueue(NumVertex);
for ( V=0; V<G->NumV; V++ )
if ( Indegree[V] == 0 )
Enqueue(V, Q);
while ( !IsEmpty(Q) ){
V = Dequeue( Q );
TopNum[V] = ++counter;
for ( ptr=G->List[V]; ptr; ptr=ptr->Next) {
W = ptr->Vertex;
if ( --Indegree[W] == 0 )
Enqueue(W, Q);
}
}
if ( counter != NumVertex )
printf("ERROR: Graph has a cycle.\n");
DisposeQueue(Q);
}