
第1题:
阅读下列说明和C代码,回答问题1至问题3,将解答写在答题纸的对应栏内。
【说明】
对有向图进行拓扑排序的方法是:
(1)初始时拓扑序列为空;
(2)任意选择一个入度为0的顶点,将其放入拓扑序列中,同时从图中删除该顶点以及从该顶点出发的弧;
(3)重复(2),直到不存在入度为0的顶点为止(若所有顶点都进入拓扑序列则完成拓扑排序,否则由于有向图中存在回路无法完成拓扑排序)。
函数int*TopSort(LinkedDigraph G)的功能是对有向图G中的顶点进行拓扑排序,返回拓扑序列中的顶点编号序列,若不能完成拓扑排序,则返回空指针。其中,图G中的顶点从1开始依次编号,顶点序列为vl,v2,…,vn,图G采用邻接表表示,其数据类型定义如下:
define MAXVNUM 50 /*最大顶点数*/
typedef struct ArcNode| /*表结点类型*/
int adjvex; /*邻接顶点编号*/
struct ArcNode*nextarc; /*指示下一个邻接顶点*/
{ArcNode;
typedef struct AdjList{ /*头结点类型*/
char vdata; /*顶点的数据信息*/
ArcNode*firstarc; /*指向邻接表的第一个表结点*/
}AdjList;
typedef struct LinkedDigraph /*图的类型*/
int n: /*图中顶点个数*/
AdjList Vhead[MAXVNUM]; /*所有顶点的头结点数组*/
}LinkedDigraph;
例如,某有向图G如图4-1所示,其邻接表如图4-2所示。

函数TopSort中用到了队列结构(Queue的定义省略),实现队列基本操作的函数原型如下表所示:

【C代码】
int*TopSort(LinkedDigraph G){
ArcNode*P; /*临时指针,指示表结点*/
Queue Q; /*临时队列,保存入度为0的顸点编号*/
int k=0; /*临时变量,用作数组元素的下标*/
int j=0,w=0; /*临时变量,用作顶点编号*/
int*topOrder,*inDegree;
topOrder=(int*)malloc((G.n+1)*sizeof(int));/*存储拓扑序列中的顶点编号*/
inDegree=(int*)malloc((G.n+1)*sizeof(int));/*存储图G中各顶点的入度*/
if(!inDegree||!topOrder) return NULL;
(1); /*构造一个空队列*/
for(j=1;j<=Gn;j++){ /*初始化*/
topOrder[j]=0;inDegree[j]=0;
}
for(j=1;j<=Gn;j++) /*求图G中各顶点的入度*/
for(p=G.Vhead[j].firstarc;p;p=p->nextarc)
inDegree[P->adjvex]+=1;
for(j=i;j<=G.n;J++) /*将图G中入度为0的顶点保存在队列中*/
if(0==inDegree[j]) EnQueue(&Q,j);
while(! IsEmpty(Q)){
(2); /*队头顶点出队列并用w保存该顶点的编号*/
topOrder[k++]=w; /*将顶点W的所有邻接顶点的入度减l(模拟删除顶点w及该顶点出发的弧的操作)*/
for(p=G.Vhead[w].firstarc;p;p=p->nextarc){
(3)-=1;
if(0== (4) ) EnQueue(&Q,P->adjvex);
}/*for*/
}/ * while*/
free(inDegree);
if( (5) )
return NULL;
return topOrder;
}/*TopSort*/
根据以上说明和C代码,填充C代码中的空(1)
第2题:
若无向连通图G具有n个顶点,则以下关于图G的叙述中,错误的是( )。
A.c的边数一定多于顶点数
B.G的生成树中一定包含n个顶点
C.从c中任意顶点出发一定能遍历图中所有顶点
D.G的邻接矩阵一定是n阶对称矩阵
第3题:
在一个有向图G的拓扑序列中,顶点Vi排列在Vj之前,说明图G中(59)。
A.一定存在弧<vi,vj>
B.一定存在弧<vj,vi>
C.可能存在vi到vj的路径,而不可能存在vj到vi的路径
D.可能存在vj到vi的路径,而不可能存在vi到vj的路径
第4题:
某图G的邻接矩阵如下所示。以下关于该图的叙述中,错误的是( )。
A.该图存在回路(环)B.该图为完全有向图C.图中所有顶点的入度都大于0D.图中所有顶点的出度都大于0
第5题:
某图 G 的邻接表如下所示。以下关于图 G的叙述中,正确的是 ( ) 。
A. G 是强连通图 B. G 是有 7 条弧的有向图C. G 是完全图 D. G 是有 7条边的无向图
第6题:
第7题:

第8题:
在有向图的邻接表中,顶点Vi在表结点中出现的次数是顶点Vi的()。
第9题:
在图G的邻接表表示中,每个顶点邻接表中所含的结点数,对于无向图来说等于该顶点的(),对于有向图来说等于该顶点的()
第10题:
度
入度
出度
依附于顶点Vi的弧数
第11题:
G中有弧<Vi,Vj>
G中有一条从Vi到Vj的路径
G中没有弧<Vi,Vj>
G中有一条从Vj到Vi的路径
第12题:
第13题:
设某有向无环图的顶点个数为n、弧数为e,那么用邻接表存储该图时,实现上述拓扑排序算法的函数TopSort的时间复杂度是(6)。
若有向图采用邻接矩阵表示(例如,图4-1所示有向图的邻接矩阵如图4-3所示),且将函数TopSort中有关邻接表的操作修改为针对邻接矩阵的操作,那么对于有n个顶点、e条弧的有向无环图,实现上述拓扑排序算法的时问复杂度是(7)。

第14题:
在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情形不可能出现的是()。
A.G中有弧
B.G中有一条从Vi到Vj的路径
C.G中没有弧
D.G中有一条从Vj到Vi的路径
第15题:
对于连通无向图G,以下叙述中,错误的是( )。
A. G 中任意两个顶点之间存在路径 B. G 中任意两个顶点之间都有边 C. 从 G 中任意顶点出发可遍历图中所有顶点 D. G的邻接矩阵是对称的
第16题:
某有向图 G 及其邻接矩阵如下所示。以下关于图的邻接矩阵存储的叙述中,错误的是( )。
A. 有向图的邻接矩阵可以是对称矩阵B. 第 i行的非零元素个数为顶点 i的出度C. 第 i行的非零元素个数为顶点 i的入度D. 有向图的邻接矩阵中非零元素个数为图中弧的数目
第17题:
已知某带权图G的邻接表如下所示,其中表结点的结构为:
以下关于该图的叙述中,正确的是( )。
A.图G是强连通图 B.图G具有14条弧 C.顶点B的出度为3 D.顶点B的入度为3
第18题:

第19题:

第20题:
若在有向图G中存在一条弧
第21题:
在有向图G的拓扑序列中,若顶点Vi在顶点Vj之前,则下列情况下不可能出现的是()。
第22题:
第23题:
G中有弧
G中有一条从Vi到Vj的路径
G中没有弧
G中有一条从Vj到Vi的路径