【PTA】【数据结构与算法】拓扑排序

判断题

1.若图G有环,则G不存在拓扑排序序列。
T F
2.若图G为连通图且不存在拓扑排序序列,则图G必有环。
T F
3.拓扑序一定是唯一的。
T F

选择题

1.对下图进行拓扑排序,可以得到不同的拓扑序列的个数是:

在这里插入图片描述

选项
A 4
B 3
C 2
D 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.有拓扑排序的图一定是()。
选项
A 无向图
B 有向无环图
C 有环图
D 强连通图
6.判定一个有向图是否存在回路除了可以利用拓扑排序方法外,还可以利用()。
选项
A 求最短路径的Dijkstra
B 求生成树的方法
C 深度优先遍历算法
D 宽度优先遍历算法
7.下列选项中,不是如下有向图的拓扑序列的是:

fGRE17-7.JPG

选项
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);
}
发布了143 篇原创文章 · 获赞 140 · 访问量 27万+

猜你喜欢

转载自blog.csdn.net/qq_43733499/article/details/103931088