while (check( ))
{ vex=pop( ); printf(vex); count++; for (i=0;i { k=array(6)_______ if ((7)_______ ) { indegree[i]--; if ((8)_______ ) push(i); } } } if( count 47.假设给定的有向图是用邻接表表示,作为输入的是图中顶点个数n和边的个数m, 以及图的m条边。在下面的程序中,我们用readdata程序过程输入图的信息,并建立该图的邻接表;利用topol程序过程获得图中顶点的一个拓扑序列。 PROGRAM topol_order(input , output) ; CONST maxn=20 ; TYPE nodeptr=^nltype ; nltype=RECORD num : integer ; link : nodeptr END ; chtype=RECORD count : integer ; head : nodeptr END ; VAR ch : ARRAY [1 .. maxn] OF chtype ; m , n , top : integer ; PROCEDURE readdata ; VAR i , j , u , v : integer ; p : nodeptr ; BEGIN write (′input vertex number n= ′); readln (n) ; write (′input edge number m= ′); readln(m) ; FOR i:=1 TO n DO BEGIN ch[i].count:= 0; ch[i].head:=NIL END; writeln(′input edges :′); FOR j:= 1 TO m DO BEGIN write( j :3 , ′: ′) ; readln( u , v ) ; new( p ) ; ch[v].count:=ch[v].count+1; p^.num:=v; (1) ___ ; (2) __; END END ; PROCEDURE topol ; VAR i, j, k: integer; t: nodeptr ; BEGIN top:= 0 ; FOR i := 1 TO n DO IF ch[i].count=0 THEN BEGIN ch[i].count := top ;top := i END; i:= 0 ; WHILE (3) ___ DO BEGIN (4) __; (5) __ ; write(j : 5) ;i:= i + 1 ;t:=ch[j].head ; WHILE t<>NIL DO BEGIN k := t^.num ; ch[k].count:=ch[k].count–1 ; IF ch[k].count=0 THEN BEGIN ch[k].count:=top; top:=k END; (6) ______ ; END END ; writeln; IF i readdata ; writeln (′output topol order : ′); topol END. 【复旦大学 1995 三 (18分)】 48.如下为拓扑排序的C程序, V2 (1).列出对右图执行该程序后的输出结果。 (2).在程序空白处填上适当语句。 V1 V3 V5 void topsort(hdnodes graph [],int n) V4 V6 {int i,j,k,top; node_pointer ptr ; top=-1; for (i=0; i if (!graph[i].count){graph[i].count=top; top=i; } for (i=0; i if(1)____ {fprintf(stderr, \ else {j=top;(2)_____; printf( \ for (ptr=graph[j].link; ptr; ptr=ptr->link) {k=ptr->vertex; graph[k].count--; if((3)_____) {graph[k].count=top; top=k; } } } } 【浙江大学 2000 六(15分)】 四、 应用题 1.(1).如果G1是一个具有n个顶点的连通无向图,那么G1最多有多少条边?G1最少有多少条边? (2).如果G2是一个具有n个顶点的强连通有向图,那么G2最多有多少条边?G2最少有多少条边? (3).如果G3是一个具有n个顶点的弱连通有向图,那么G3最多有多少条边?G3最少有多少条边? 【复旦大学 1997 一(9分)】 2.n个顶点的无向连通图最少有多少条边?n个顶点的有向连通图最少有多少条边? 【山东大学 2000 一、3 (4分)】 3.一个二部图的邻接矩阵A是一个什么类型的矩阵?【北京科技大学 1999 一、8(2分)】 4.证明:具有n个顶点和多于n-1条边的无向连通图G一定不是树。【东南大学 1993 四(10分)】 5.证明对有向图的顶点适当的编号,可使其邻接矩阵为下三角形且主对角线为全0的充要条件是该图为无环图。【北京邮电大学 2002 三 (10分)】 6.用邻接矩阵表示图时,矩阵元素的个数与顶点个数是否相关?与边的条数是否有关? 【西安电子科技大学 2000计应用 一、6(5分)】 7.请回答下列关于图(Graph)的一些问题:(每题4分) (1).有n个顶点的有向强连通图最多有多少条边?最少有多少条边? (2).表示有1000个顶点、l000条边的有向图的邻接矩阵有多少个矩阵元素?是否稀 疏矩阵? (3).对于一个有向图,不用拓扑排序,如何判断图中是否存在环?【清华大学2000一(12分)】 8.解答问题。设有数据逻辑结构为: B = (K, R), K = {k1, k2, ?, k9} R={ 9.有向图的邻接表存储如下:(1).画出其邻接矩阵存储;(2).写出图的所有强连通分量;(3).写出顶点a到顶点i的全部简单路径。【东北大学 1997 一、5 (5分)】 10.试用下列三种表示法画出网G 的存储结构,并评述这三种表示法的优、缺点: (1).邻接矩阵表示法; (2).邻接表表示法; (3).其它表示法。【华中理工大学2000 三(12分)】 11.已知无向图G,V(G)={1,2,3,4},E(G)={(1,2),(1,3),(2,3),(2,4),(3,4)}试画出G的邻接多表,并说明,若已知点I,如何根据邻接多表找到与I相邻的点j? 【东南大学 1994 一、2 (8分) 1998 一、6(8分)】 12.如何对有向图中的顶点号重新安排可使得该图的邻接矩阵中所有的1都集中到对角线以上? 【清华大学 1999 一、5 (2分)】 13.假定G=(V,E)是有向图,V={1,2,...,N},N>=1,G以邻接矩阵方式存储,G的邻接矩阵为A,即A是一个二维数组,如果i到j有边,则A[i,j]=1,否则A[i,j]=0,请给出一个算法,该算法能判断G是否是非循环图(即G中是否存在回路),要求算法的时间复杂性为O(n*n)。 【吉林大学 1998 三(16分)】 14. 首先将如下图所示的无向图给出其存储结构的邻接链表表示,然后写出对其分别进行深度,广度优先遍历的结果。 【天津大学 1999 一】 15.下面的邻接表表示一个给定的无向图 (1)给出从顶点v1开始,对图G用深度优先搜索法进行遍历时的顶点序列; (2)给出从顶点v1开始,对图G用广度优先搜索法进行遍历时的顶点序列。【复旦大学1998六(10分)) 1 2 5 1 3 4 8 6 7 8 9 10 9 15题图 14题图 16题图 16.给出图G: (1).画出G的邻接表表示图; (2).根据你画出的邻接表,以顶点①为根,画出G的深度优先生成树和广度优先生成树。 【南开大学 1997 五 (14分)】 17.设G=(V,E)以邻接表存储,如图所示,试画出图的深度优先和广度优先生成树。 234?1 5?1342 124? 31235? 4 524? 【北京轻工业学院 1998 八 (6分)】 18.对一个图进行遍历可以得到不同的遍历序列,那么导致得到的遍历序列不唯一的因素有哪些? 【北京航空航天大学 1998 一、7 (4分)】 19.解答下面的问题 (1).如果每个指针需要4个字节,每个顶点的标号占2个字节,每条边的权值占2个字节。下图采用哪种表示法所需的空间较多?为什么? 2 9 8 7 10 5 1 20 4 1 10 5 6 10 2 2 3 3 6 11 4 3 15 3 5 19题图 20题图 (2).写出下图从顶点1开始的DFS树。【西安电子科技大学 2000计应用 六 (10分)】 20.如下所示的连通图,请画出: (1).以顶点①为根的深度优先生成树;(5分) (2).如果有关节点,请找出所有的关节点。(5分)【清华大学 1998 七 (10分)】 21.某田径赛中各选手的参赛项目表如下: 姓名 参 赛 项 ZHAO A B E QIAN C D SHUN C E F LI D F A ZHOU B F 设项目A ,B ,?,F各表示一数据元素,若两项目不能同时举行,则将其连线(约束条件). 3 4 5 6 7 2 (1).根据此表及约束条件画出相应的图状结构模型,并画出此图的邻接表结构; (2).写出从元素A出发按“广度优先搜索”算法遍历此图的元素序列. 【北京科技大学 1999 五 2000 五 (12分)】 22.已知无向图如下所示: (1).给出从V1开始的广度优先搜索序列;(2).画出它的邻接表; (3).画出从V1开始深度优先搜索生成树。【燕山大学 2000 五 (5分)】 234?v1 5?1v2 5?1v3 v416? v523? v64? 第22题图 第23题图 23.已知某图的邻接表为 (1).写出此邻接表对应的邻接矩阵;(2分) (2).写出由v1开始的深度优先遍历的序列;(2分) (3).写出由v1开始的深度优先的生成树;(2分) (4).写出由v1开始的广度优先遍历的序列;(2分) (5).写出由v1开始的广度优先的生成树;(2分) (6).写出将无向图的邻接表转换成邻接矩阵的算法。(8分) 【山东大学 1998 六、 A 2 18分】 5 D 6 4 C 24.考虑右图: B E 1 (1)从顶点A出发,求它的深度优先生成树 3 5 3 1 (2)从顶点E出发,求它的广度优先生成树 G F (3)根据普利姆(Prim) 算法, 求它的最小生成树【上海交通大学 1999 六 (12分)】 25.在什么情况下,Prim算法与Kruskual算法生成不同的MST? 【西安电子科技大学 2000计应用 一、11 (5分)】 26.下面是求无向连通图最小生成树的一种方法。 将图中所有边按权重从大到小排序为(e1,e2,?,em) i:=1 WHILE (所剩边数 >=顶点数) BEGIN 从图中删去ei 若图不再连通,则恢复ei i:=i+1 END. 试证明这个算法所得的图是原图的最小代价生成树。【北京邮电大学 1999 五 (10分)】 27.已知一个无向图如下图所示,要求分别用Prim和Kruskal算法生成最小树(假设以①为起点,试画出构造过程)。【哈尔滨工业大学 1999 九 (8分)】 20 1 4 1 9 4 2 5 11 7 8 2 9 6 6 14 6 3 10 10 5 3 2 6 5 4 4 5 18