数据结构图习题

数据结构图习题
数据结构图习题

第七章图:习题

习题

一、选择题

1.设完全无向图的顶点个数为n,则该图有( )条边。

A. n-l

B. n(n-l)/2

C.n(n+l)/2

D. n(n-l)

2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。

A.3

B.2

C.1

D.1/2

3.有向图的一个顶点的度为该顶点的( )。

A.入度

B. 出度

C.入度与出度之和

D.(入度+出度)/2

4.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。

A.强连通图

B.连通图

C.非连通图

D.非强连通图

5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。

A.上三角矩阵

B.稀疏矩阵

C.对角矩阵

D.对称矩阵

6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵

A.第i列元素之和

B.第i行元素之和减去第i列元素之和

C.第i行元素之和

D.第i行元素之和加上第i列元素之和

7.对于具有e条边的无向图,它的邻接表中有( )个边结点。

A.e-l

B.e

C.2(e-l)

D. 2e

8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。

A. O(n2)

B. O(n*e)

C. O(n*logn)

D.O(e)

9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( )

A.n

B.n+l

C.n-l

D.n+e

10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。

A.最小

B.任何

C.广度优先

D.深度优先

二、填空题

1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。

2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。

3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。

4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。

5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。

6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。

7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。

8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。

三、简答题

l.回答以下问题:

(1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?

(2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?

2.题图7-1为一有向图,按要求回答问题:

(1)写出各顶点的入度、出度和度。

(2)给出该图的邻接矩阵。

(3)给出该图的邻接表。

(4)给出该图的十字链表。

3.题图7-2为一无向图,请按要求回答问题:

(1)画出该图的邻接表。

(2)画出该图的邻接多重表。

(3)分别写出从顶点1出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索遍历算法得到的顶点序列。

4.题图7-3为一带权无向图,请按要求回答问题。

(1)画出该图的邻接矩阵,并按普里姆算法求其最小生成树。

(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。

5.题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算法求从顶点1到其他各项点的最短路径,要求给出整个计算过程。

6.题图7-5为一个带权有向图

(1)给出该图的邻接矩阵。

(2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。

7.对于有向无环图,

(1)叙述求拓扑有序序列的步骤。

(2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。

8.题图7-7是一个AOE网,试求:

(1)每项活动的最早开始时间和最迟开始时间。

(2)完成整个工程至少需要多少天。

(3)哪些是关键活动。

(4)是否存在某些活动,当提高其速度后能使整个工期缩短。

四、算法设计题

1.编写一个算法,判断图G中是否存在从顶点v i到v j的长度为k的简单路径。

2.以邻接表作为图的存储结构,编写实现连通图G的深度优先搜索遍历(从顶点v 出发)的非递归函数。

3.给定n个村庄之间的交通图。若村庄i与村庄j之间有路可通,则将顶点i与顶点j之间用边连接,边上的权值Wij表示这条道路的长度。现打算在这n个村庄中选定一个村庄建一所医院。试编写一个算法,求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。

4.编写一个函数,计算给定的有向图的邻接矩阵的每对顶点之间的最短路径。

第七章图

第7章图

一、选择题(参考答案):

1.B 2.B 3.C 4.B 5.D

6. C 7.D 8.A,D 9.D 10.A

二、填空题(参考答案)

1.n(n-l)/2, n(n-l)。2.第i行。

3. 2e, e0 4.邻接表,逆邻接表。

5.权值递增,顶点连通。 6.O(e),O(e)。

7.n,n-l。8.栈。

三、简答题

1.回答以下问题:

(1)有n个顶点的无向连通图最多需要多少条边?最少需要多少条边?

(2)表示一个具有1000个顶点、1000条边的无向图的邻接矩阵有多少个矩阵元素?有多少非零元素?是否为稀疏矩阵?

【解答】(l)有n个顶点的无向连通图最多有n(n-l)/2条边(构成一个无向完全图的情况);最少有n-l条边(n个顶点是连通的)。

(2)这样的矩阵共有lOOO*1000=1000000个矩阵元素,因为有1000条边,所以有20 00非零元素,因此该矩阵是稀疏矩阵。

2.题图7-1为一有向图,按要求回答问题:

题图7-1

(1)写出各顶点的入度、出度和度。

(2)给出该图的邻接矩阵。

(3)给出该图的邻接表。

(4)给出该图的十字链表。

【解答】(l)各顶点入度、出度和度如下表所示。

(2)邻接矩阵如下所示。

0 0 0 0 0 0

1 0 0 1 0 0

0 1 0 0 0 1

0 0 1 0 1 1

1 0 0 0 0 0

1 1 0 0 1 0

(3)邻接表如下所示。

(4)十字接表如下所示。

3.题图7-2为一无向图,请按要求回答问题:

(1)画出该图的邻接表。

(2)画出该图的邻接多重表。

(3)分别写出从顶点l出发按深度优先搜索遍历算法得到的顶点序列和按广度优先搜索

遍历算法得到的顶点序列。

题图7-2

【解答】(1)邻接表如下所示。

(2)多重邻接表如下所示。

(3)从顶点1出发,深度优先搜索遍历序列为:123456;广度优先搜索遍历序列为:123 564。

4.题图7-3为一带权无向图,请按要求回答问题:

(1)画出该图的邻接矩阵,并按普里姆算法求其最小生成树。

(2)画出该图的邻接表,并按克鲁斯卡尔算法求其最小生成树。

【解答】(1)按普里姆算法其最小生成树如下所示。

(2)按克鲁斯卡尔算法其最小生成树如下所示。

5.题图7-4是一带权有向图,试采用狄杰斯特拉Dijkstra算

法求从顶点l到其他各顶点的最短路径,要求给出整个计算过程。

【解答】(1)初值:s[]={1),dist[]={0,20,15,∞,

∞,∞}(顶点1到其他各项点的权值),path[]={1,1,1,

-l,-1,-1)(顶点l到其他各项点有弧存在时为1,否则

为-1)。

(2)在V-S中找最近(dist[]最小)的顶点3,加入S中,即s[]={l,3),并重新计算顶点l到达顶点2,4,5和6的距离,修改相应的dist值:

dist[2]=min{dist[2], dist[3]+cost[3][2]}=min{20, 15+4}=19;

dist[6l=min{dist[6], dist[3]+cost[3][6]}==Inin{∞,15+10}=25;

则有dist[]={0,19,15,∞,∞,25},path[]={l,3,1,-l,-l,3}。

(3)在V-S中找出最近的顶点4,加入S中,即s[]={1,3,2},并重新计算顶点1到达顶点4,5和6的距离,修改相应的dist值:

dist[5]-min{dist[5], dist[2]+ cost[2][5])-min{∞,19+10}=29,

则有dist[]={0,19,15, ∞,29,25),path[]={l,3,l,-1,2,3}.

(4)在V-S中找出最近的顶点6,加入S中,即s[].{1,3,2,6),并重新计算顶点l到达顶点4和5的距离,修改相应的dist值:

dist[4]=min{dist[4], dist[6]+cost[6][4])=min{∞..,25+4}=29,

则有dist[]={0, 19, 15, 29, 29, 25}, path[]={l,3,1,6,2,3}。

(5)在V-S中找出最近的顶点4,加入S中,即s[]:{l,3,2,6,4},并重新计算顶点l到达顶点5的距离,此时不需要修改dist值,则有dist[]={0,19,15,29,29,2 5),path[]={l,3, l,6,2, 3}。

(6)在V-S中找出最近的顶点5,加入S中,即s口={l,3,2,6,4,5}。此时S 中包含了图的所有顶点,算法结束。最终dist[]={0,19,15,29,29,25),path[]={1,3,l,6,2, 3}。

由此得到:

从顶点1到顶点2的最短路径长度为:19 最短路径为:2<-3<-1

从顶点l到顶点3的最短路径长度为:15 最短路径为:3<-1

从顶点l到顶点4的最短路径长度为:29 最短路径为:4<-6<-3<-1

从顶点l到顶点5的最短路径长度为:29 最短路径为:5<-2<-3<-l

从顶点l到顶点6的最短路径长度为:25 最短路径为:6<-3<-1

6.题图7-5为一个带权有向图,

(1)给出该图的邻接矩阵。

(2)请用弗洛伊德算法求出各顶点对之间的最短路径长度,要求写出其相应的矩阵序列。

【解答】(1)邻接矩阵如下:

0 10 ∞∞

15 0 6 ∞

3 ∞0 4

∞8 2 0

(2)采用弗洛伊德算法求最短路径的过程如下:

7.对于有向无环图,

(1)叙述求拓扑有序序列的步骤。

(2)对于题图7-6所示的有向图,写出它的4个不同的拓扑有序序列。

【解答】(1)参见7.6节的介绍。

(2)它的4个不同的拓扑有序序列是:12345678,12354678,12347856,12347568。

8.题图7-7是一个AOE网,试求:

(l)每项活动的最早开始时间和最迟开始时间。

(2)完成整个工程至少需要多少天(设弧上权值为天数)。

(3)哪些是关键活动。

(4)是否存在某些活动,当提高其速度后能使整个工期缩短。

【解答】(1)所有活动的最早开始时间e(i)、最迟开始时间l(i)以及d(i)=1(i)一e (i),如下所示。

(2)完成此工程最少需要23天。

(3)从以上计算得出关键活动为:a2,a4,a6,a8,a9,aio,a12,a13和a14。

(4)存在a2,a4,al4活动,当其提高速度后能使整个工程缩短工期。

四、算法设计题

1.编写一个算法,判断图G中是否存在从顶点vi到vj的长度为k的简单路径。

【解答】采用深度优先遍历算法来判断图G中是否存在从顶点vi到vj的长度为k 的简单路径。其中,变量n用于记录经过的顶点数,当n=k+l时,表示路径长度为k;suc 记录是否成功地找到了所求路径。算法如下所示。

#define Max<一个大于顶点数的常量>

int visited [Max], //全局变量

int exist (ALGraph *g,int vi; int Vj, intk)

{

int i,suc;

for(i=O;in;i十+) //置初值

visited [i] =0;

suc=0; n=0;

dfs (g, vi, Vj, suc,k);

return suc;

}

void dfs (ALGraph *g,int V,int Vj, int &suc, int k)

{

ArcNode *p;

Visited [v] =l;

n++;

if (n==k+l&&v==vj)suc=l; //找到了满足题意的路径

if(n

p=g->adj list[v] ->firstarc;

while(p!=NULL&& suc==0){

if (visited[p->adj vex] ==0){

dfs (g, p->adjvex, Vj, suc,k)j

n--;

}

p=p->nextarc;

}

}

}

2.以邻接表作为图的存储结构,编写实现连通图G的深度优先搜索遍历(从顶点v 出发)的非递归函数。

【算法基本思想】第一步,首先访问图G的指定起始顶点v;第二步,从v出发,访问一个与V邻接且未被访问的顶点p,再从顶点p出发,访问与p邻接且未被访问的顶点q,如此重复,直到找不到未访问过的邻接顶点为止;第三步,退回到尚有未被访问过的邻接点的顶点,从该顶点出发,重复第二、三步,直到所有被访问过的顶点的邻接点都已被访问为止。为此,用一个栈保存被访问过的结点,以便回溯查找已被访问结点的未被访问过的邻接点。具体函数如下:

#define MAXVEX 100 //定义顶点数的最大值

Void dfs (Adj List g,int v,int n) //n表示顶点数

{

Struct ArcNode *stack[MAXVEX],*p;

int visited [MAXVEX], top=0,i;

for (i-0,i

printf(¨%d\n¨,v);

p=g[v].firstarc;

while (top>0||p)

{

while (p)

if (visited[p->adj vex] ==0)

p=p->nextarc //查找下一邻接点

else

{ printf(¨%d\n¨, p->adjvex);

visited [p->adjvex] =l;

top++; //将访问过的结点入栈

stack[top] =p;

p=g [p->adj veX].firstarc;

}

if (top>0)

{ p=stack [top];

top--; //退钱,回溯查找已被访问结点的未被访问过的邻接点

p=p->nextarc;

}

}

}

3.给定n个村庄之间的交通图。若村庄i与村庄j之间有路可通,则将顶点i与顶点j之间用边连接,边上的权值Wij表示这条道路的长度。现打算在这n个村庄中选择一个村庄建一所医院。试编写一个算法,求出该医院应建在哪个村庄,才能使距离医院最远的村庄到医院的路程最短。

将n个村庄的交通图用邻接矩阵A表示。

【算法思路】先应用弗洛伊德算法计算每对顶点之间的最短路径;然后找出从每一个顶

点到其他各顶点的最短路径中最长的路径;最后在这n条最长路径中找出最短的一条。算法如

下:

#define n<村庄个数>

int maxminpath (float A[n] [n])

{

int i,j,k;

float s.min=10000; //最短路径长度min置初值10000

for(k=O;k

for(i=O;i

for(j=0;j

if (A[i][k]+A[k][j]

A[i][j]=A[i][k]+A[k][j];

k=-l;

f。r(i=O; i

s=0;

f。r(j=0;j

if(A[i][j]>s)

s=A[i][j];

if (s

k=i;

min=s;

}

}

return k:

}

4.编写一个函数计算给定的有向图的邻接矩阵的每对顶点之间的最短路径。本题实质上就是狄杰斯特拉算法。

【算法思想】假设原点为v:

(l)置集合s的初态为空。

(2)把顶点v放入集合s中。

(3)确定从v开始的n-l条路径。

(4)选择最短距离的顶点u。

(5)把顶点u加入集合s中。

(6)更改距离。

【解答】具体实现如下:

#define MAXVEX 100 //定义顶点数的最大值

void Shortestpath (int v,int cost [MAXVEX] [MAXVEX], int d ist [MAXVEX], int)

//最终的dist[j](1≤j≤n)为从顶点v到项点j之间的最短路径长度

f int s[mAXVEXl,i.u,nux,w;

for(i=O;i≤n-l; i++) //置集合s的初态为空

‘ s[i]=O;

dist[i] =cost[v][i];

s [v]=1; //把顶点v放入集合s

dist [v] =O;

num=0;

while (num

{ U=Choose(s,dist,n);

s[u]=l;

num++; //把顶点u放入s

for (w=0;w

if ( !s[w])

if (dist[u]+cost [u] [w]

dist [w] =dist[u]+cost[u] [w];

}

}

其中函数choose0的功能是返回满足条件dist[u]=minimum(dist[w]),且s[w]=0的顶点u。定义如下:

int choose (int s[],int dist[],int n)

{ int min, i=O,u;

while (s[i] ==1) i++,

min=dist [i];

u=i;

while (i

{if(s[i]==1)i++;

else if (min>dist[i]

{u=i;

min=dist [i]

}

i++;

}

return U: }

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

数据结构实验十一:图实验

一,实验题目 实验十一:图实验 采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径。 二,问题分析 本程序要求采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径,完成这些操作需要解决的关键问题是:用邻接表的形式存储有向图并输出该邻接表。用一个函数实现判断任意两点间是否存在路径。 1,数据的输入形式和输入值的范围:输入的图的结点均为整型。 2,结果的输出形式:输出的是两结点间是否存在路径的情况。 3,测试数据:输入的图的结点个数为:4 输入的图的边得个数为:3 边的信息为:1 2,2 3,3 1 三,概要设计 (1)为了实现上述程序的功能,需要: A,用邻接表的方式构建图 B,深度优先遍历该图的结点 C,判断任意两结点间是否存在路径 (2)本程序包含6个函数: a,主函数main() b,用邻接表建立图函数create_adjlistgraph() c,深度优先搜索遍历函数dfs() d,初始化遍历数组并判断有无通路函数dfs_trave() e,输出邻接表函数print() f,释放邻接表结点空间函数freealgraph() 各函数间关系如右图所示: 四,详细设计 (1)邻接表中的结点类型定义:

typedef struct arcnode{ int adjvex; arcnode *nextarc; }arcnode; (2)邻接表中头结点的类型定义: typedef struct{ char vexdata; arcnode *firstarc; }adjlist; (3)邻接表类型定义: typedef struct{ adjlist vextices[max]; int vexnum,arcnum; }algraph; (4)深度优先搜索遍历函数伪代码: int dfs(algraph *alg,int i,int n){ arcnode *p; visited[i]=1; p=alg->vextices[i].firstarc; while(p!=NULL) { if(visited[p->adjvex]==0){ if(p->adjvex==n) {flag=1; } dfs(alg,p->adjvex,n); if(flag==1) return 1; } p=p->nextarc; } return 0; } (5)初始化遍历数组并判断有无通路函数伪代码: void dfs_trave(algraph *alg,int x,int y){ int i; for(i=0;i<=alg->vexnum;i++) visited[i]=0; dfs(alg,x,y); } 五,源代码 #include "stdio.h" #include "stdlib.h" #include "malloc.h" #define max 100 typedef struct arcnode{ //定义邻接表中的结点类型 int adjvex; //定点信息 arcnode *nextarc; //指向下一个结点的指针nextarc }arcnode; typedef struct{ //定义邻接表中头结点的类型 char vexdata; //头结点的序号 arcnode *firstarc; //定义一个arcnode型指针指向头结点所对应的下一个结点}adjlist; typedef struct{ //定义邻接表类型 adjlist vextices[max]; //定义表头结点数组

数据结构C语言版 无向图的邻接多重表存储表示和实现

数据结构C语言版无向图的邻接多重表存储表示和实现.txt只要你要,只要我有,你还外边转什么阿老实在我身边待着就行了。听我的就是,问那么多干嘛,我在你身边,你还走错路!跟着我!不能给你幸福是我的错,但谁让你不幸福,我TMD去砍了他/* 数据结构C语言版无向图的邻接多重表存储表示和实现 P166 编译环境:Dev-C++ 4.9.9.2 日期:2011年2月15日 */ #include #include #define MAX_NAME 3 // 顶点字符串的最大长度+1 #define MAX_INFO 80 // 相关信息字符串的最大长度+1 typedef char InfoType; typedef char VertexType[MAX_NAME]; // 字符串类型 // AMLGraph.h 无向图的邻接多重表存储表示 #define MAX_VERTEX_NUM 20 typedef enum{unvisited,visited}VisitIf; typedef struct EBox { VisitIf mark; // 访问标记 int ivex,jvex; // 该边依附的两个顶点的位置 struct EBox *ilink,*jlink; // 分别指向依附这两个顶点的下一条边 InfoType *info; // 该边信息指针 }EBox; typedef struct { VertexType data; EBox *firstedge; // 指向第一条依附该顶点的边 }VexBox; typedef struct { VexBox adjmulist[MAX_VERTEX_NUM]; int vexnum,edgenum; // 无向图的当前顶点数和边数 }AMLGraph; typedef int QElemType;

数据结构图习题

第七章图:习题 习题 一、选择题 1.设完全无向图的顶点个数为n,则该图有( )条边。 A. n-l B. n(n-l)/2 C.n(n+l)/2 D. n(n-l) 2.在一个无向图中,所有顶点的度数之和等于所有边数的( )倍。 A.3 B.2 C.1 D.1/2 3.有向图的一个顶点的度为该顶点的( )。 A.入度 B. 出度 C.入度与出度之和 D.(入度+出度)/2 4.在无向图G (V,E)中,如果图中任意两个顶点vi、vj (vi、vj∈V,vi≠vj)都的,则称该图是( )。 A.强连通图 B.连通图 C.非连通图 D.非强连通图 5.若采用邻接矩阵存储具有n个顶点的一个无向图,则该邻接矩阵是一个( )。 A.上三角矩阵 B.稀疏矩阵 C.对角矩阵 D.对称矩阵 6.若采用邻接矩阵存储具有n个顶点的一个有向图,顶点vi的出度等于邻接矩阵 A.第i列元素之和 B.第i行元素之和减去第i列元素之和 C.第i行元素之和 D.第i行元素之和加上第i列元素之和 7.对于具有e条边的无向图,它的邻接表中有( )个边结点。 A.e-l B.e C.2(e-l) D. 2e 8.对于含有n个顶点和e条边的无向连通图,利用普里姆Prim算法产生最小生成时间复杂性为( ),利用克鲁斯卡尔Kruskal算法产生最小生成树(假设边已经按权的次序排序),其时间复杂性为( )。 A. O(n2) B. O(n*e) C. O(n*logn) D.O(e) 9.对于一个具有n个顶点和e条边的有向图,拓扑排序总的时间花费为O( ) A.n B.n+l C.n-l D.n+e 10.在一个带权连通图G中,权值最小的边一定包含在G的( )生成树中。 A.最小 B.任何 C.广度优先 D.深度优先 二、填空题 1.在一个具有n个顶点的无向完全图中,包含有____条边;在一个具有n个有向完全图中,包含有____条边。 2.对于无向图,顶点vi的度等于其邻接矩阵____ 的元素之和。 3.对于一个具有n个顶点和e条边的无向图,在其邻接表中,含有____个边对于一个具有n个顶点和e条边的有向图,在其邻接表中,含有_______个弧结点。 4.十字链表是有向图的另一种链式存储结构,实际上是将_______和_______结合起来的一种链表。 5.在构造最小生成树时,克鲁斯卡尔算法是一种按_______的次序选择合适的边来构造最小生成树的方法;普里姆算法是按逐个将_______的方式来构造最小生成树的另一种方法。 6.对用邻接表表示的图进行深度优先遍历时,其时间复杂度为一;对用邻接表表示的图进行广度优先遍历时,其时间复杂度为_______。 7.对于一个具有n个顶点和e条边的连通图,其生成树中的顶点数为_______ ,边数为_______。 8.在执行拓扑排序的过程中,当某个顶点的入度为零时,就将此顶点输出,同时将该顶点的所有后继顶点的入度减1。为了避免重复检测顶点的入度是否为零,需要设立一个____来存放入度为零的顶点。

数据结构实验---图的储存与遍历

数据结构实验---图的储存与遍历

学号: 姓名: 实验日期: 2016.1.7 实验名称: 图的存贮与遍历 一、实验目的 掌握图这种复杂的非线性结构的邻接矩阵和邻接表的存储表示,以及在此两种常用存储方式下深度优先遍历(DFS)和广度优先遍历(BFS)操作的实现。 二、实验内容与实验步骤 题目1:对以邻接矩阵为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接矩阵为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接矩阵表示,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 题目2:对以邻接表为存储结构的图进行DFS 和BFS 遍历 问题描述:以邻接表为图的存储结构,实现图的DFS 和BFS 遍历。 基本要求:建立一个图的邻接表存贮,输出顶点的一种DFS 和BFS 序列。 测试数据:如图所示 V0 V1 V2 V3 V4 三、附录: 在此贴上调试好的程序。 #include #include #include V0 V1 V4 V3 V2 ??? ? ??? ? ????????=010000000101010 1000100010A 1 0 1 0 3 3 4

#define M 100 typedef struct node { char vex[M][2]; int edge[M ][ M ]; int n,e; }Graph; int visited[M]; Graph *Create_Graph() { Graph *GA; int i,j,k,w; GA=(Graph*)malloc(sizeof(Graph)); printf ("请输入矩阵的顶点数和边数(用逗号隔开):\n"); scanf("%d,%d",&GA->n,&GA->e); printf ("请输入矩阵顶点信息:\n"); for(i = 0;in;i++) scanf("%s",&(GA->vex[i][0]),&(GA->vex[i][1])); for (i = 0;in;i++) for (j = 0;jn;j++) GA->edge[i][j] = 0; for (k = 0;ke;k++) { printf ("请输入第%d条边的顶点位置(i,j)和权值(用逗号隔开):",k+1); scanf ("%d,%d,%d",&i,&j,&w); GA->edge[i][j] = w; } return(GA); } void dfs(Graph *GA, int v) { int i; printf("%c%c\n",GA->vex[v][0],GA->vex[v][1]); visited[v]=1;

数据结构:图子系统

/* *题目:编写按键盘输入的数据建立图的邻接矩阵存储 * 编写图的深度优先遍历程序 * 编写图的广度优先遍历程序 * 设计一个选择式菜单形式如下: * 图子系统 * *********************************** * * 1------更新邻接矩阵* * * 2------深度优先遍历* * * 3------广度优先遍历* * * 0------ 返回* * *********************************** * 请选择菜单号(0--3): */ #include #include #define GRAPHMAX 30 #define QUEUEMAX 30 typedef struct //图的邻接表的结构体 { char value[GRAPHMAX]; //记录图中的点值 int data[GRAPHMAX][GRAPHMAX]; //记录图中的边的关系int n, e; //记录图中的点的个数及边的个数 }pGraph; typedef struct //队列结构体 { int queueData[QUEUEMAX]; int front, rear, count; //队头,队尾,数目 }grQueue; void createCraph(pGraph *G); void DFSTraverse(pGraph *G); void BFSTraverse(pGraph *G); void DFS(pGraph *G, int i); void BFS(pGraph *G, int i); void initQueue(grQueue *Q); int queueEmpty(grQueue *Q); int queueFull(grQueue *Q); int outQueue(grQueue *Q); void inQueue(grQueue *Q, int i);

数据结构实验报告图实验

邻接矩阵的实现 1. 实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现2. 实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历3.设计与编码MGraph.h #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; }

int vertexNum, arcNum; }; #endif MGraph.cpp #include using namespace std; #include "MGraph.h" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0; for(k = 0; k < arcNum; k++) { cout << "Please enter two vertexs number of edge: " cin >> i >> j; arc[i][j] = 1; arc[j][i] = 1; } }

数据结构实验四:无向图的应用

《数据结构》实验报告 1 2 实验题目:第四次实验《无向图的应用》 3 姓名:刘创学号:132054137 班级:1320541 4 系名:计算机工程系专业:计算机科学与技术5 指导老师:刘海静 6 实验时间:2015年6月18日星期四实验地点:软件实验室 【实验概述】 1.实验目的及要求 目的:掌握图的有关知识 要求:用图的邻接表存储无向图; 实现图的遍历等操作 2.实验原理 图的遍历 图的存储 3.实验环境(使用的软件) VC++6.0/VS2013 【实验内容】 1.实验算法设计 实验:存储图使用图的邻接表进行存储; 用深度优先排序进行遍历图 2.实验过程(源代码及描述、调试过程及分析) 调试过程中,两个实验没有出现太大的问题,理论联系实际,多时间去实践方可等心应手。 实验代码: GraphTraverse.cpp #include #include typedef char InfoType; typedef char VertexType;

#define MaxVertexNum 40 //最大顶点数 using namespace std; typedef struct node //表结点 { int adjvertex; //邻接点域 InfoType info; //与边相关信息(权值) struct node *next; //指向下一个领节点的指针域 }EdgeNode; typedef struct vnode { VertexType vertex; //顶点域信息 EdgeNode *firstedge; //边表头指针 }VertexNode; typedef struct { VertexNode adjlist[MaxVertexNum];//邻接表 int vertexNum, edgeNum;//顶点数和边数 }ALGraph; //以邻接表存储的图 int visited[MaxVertexNum]; int e; void CreatAdjList(ALGraph* G) //创建无向图(邻接表) { int i, j, k; EdgeNode * p1; //因为是无向图,所以有两次建立边表的过程EdgeNode * p2; EdgeNode * p3; EdgeNode * p4; cout << "请输入无向图的顶点数和边数:";

数据结构实验

实验1 (C语言补充实验) 有顺序表A和B,其元素值均按从小到大的升序排列,要求将它们合并成一 个顺序表C,且C的元素也是从小到大的升序排列。 #include main() { intn,m,i=0,j=0,k=0,a[5],b[5],c[10];/* 必须设个m做为数组的输入的计数器,不能用i ,不然进行到while 时i 直接为5*/ for(m=0;m<=4;m++)scanf("%d",&a[m]);// 输入数组a for(m=0;m<=4;m++)scanf("%d",&b[m]);// 输入数组b while(i<5&&j<5) {if(a[i]b[j]){c[k]=b[j];k++;j++;} else{c[k]=a[i];k++;i++;j++;}// 使输入的两组数组中相同的数只输出一 个 } if(i<5) for(n=i;n<5;n++) {c[k]=a[n];k++;} elseif(j<5) for(n=j;n<5;n++) {c[k]=b[n];k++;} for(i=0;i

求A QB #include main() { inti,j,k=0,a[5],b[5],c[5];//A=a[5],B=b[5],A n B=c[5] for(i=0;i<5;i++)scanf("%d",&a[i]);// 输入a 数组 for(i=0;i<5;i++)scanf("%d",&b[i]);〃输入b 数组 for(i=0;i<5;i++) {for(j=0;j<5;j++) if(a[i]==b[j]){c[k]=a[i];k++;}// 当有元素重复时,只取一个放入 c 中} for(i=0;i #defineN4 main() { inti,j,m,k,a[N+1];//k 为最后输出数组的长度变量

数据结构 第六章 图 练习题及答案详细解析

图 1. 填空题 ⑴设无向图G中顶点数为n,则图G至少有()条边,至多有()条边;若G为有向图,则至少有()条边,至多有()条边。 【解答】0,n(n-1)/2,0,n(n-1) 【分析】图的顶点集合是有穷非空的,而边集可以是空集;边数达到最多的图称为完全图,在完全图中,任意两个顶点之间都存在边。 ⑵任何连通图的连通分量只有一个,即是()。 【解答】其自身 ⑶图的存储结构主要有两种,分别是()和()。 【解答】邻接矩阵,邻接表 【分析】这是最常用的两种存储结构,此外,还有十字链表、邻接多重表、边集数组等。 ⑷已知无向图G的顶点数为n,边数为e,其邻接表表示的空间复杂度为()。 【解答】O(n+e) 【分析】在无向图的邻接表中,顶点表有n个结点,边表有2e个结点,共有n+2e个结点,其空间复杂度为O(n+2e)=O(n+e)。 ⑸已知一个有向图的邻接矩阵表示,计算第j个顶点的入度的方法是()。 【解答】求第j列的所有元素之和 ⑹有向图G用邻接矩阵A[n][n]存储,其第i行的所有元素之和等于顶点i的()。 【解答】出度 ⑺图的深度优先遍历类似于树的()遍历,它所用到的数据结构是();图的广度优先遍历类似于树的()遍历,它所用到的数据结构是()。 【解答】前序,栈,层序,队列 ⑻对于含有n个顶点e条边的连通图,利用Prim算法求最小生成树的时间复杂度为(),利用Kruskal 算法求最小生成树的时间复杂度为()。 【解答】O(n2),O(elog2e) 【分析】Prim算法采用邻接矩阵做存储结构,适合于求稠密图的最小生成树;Kruskal算法采用边集数组做存储结构,适合于求稀疏图的最小生成树。 ⑼如果一个有向图不存在(),则该图的全部顶点可以排列成一个拓扑序列。 【解答】回路 ⑽在一个有向图中,若存在弧、、,则在其拓扑序列中,顶点vi, vj, vk的相对次序为()。 【解答】vi, vj, vk

数据结构实验报告图实验

图实验 一,邻接矩阵的实现 1.实验目的 (1)掌握图的逻辑结构 (2)掌握图的邻接矩阵的存储结构 (3)验证图的邻接矩阵存储及其遍历操作的实现 2.实验内容 (1)建立无向图的邻接矩阵存储 (2)进行深度优先遍历 (3)进行广度优先遍历 3.设计与编码 #ifndef MGraph_H #define MGraph_H const int MaxSize = 10; template class MGraph { public: MGraph(DataType a[], int n, int e); ~MGraph(){ } void DFSTraverse(int v); void BFSTraverse(int v); private: DataType vertex[MaxSize]; int arc[MaxSize][MaxSize]; int vertexNum, arcNum; }; #endif #include using namespace std; #include "" extern int visited[MaxSize]; template MGraph::MGraph(DataType a[], int n, int e) { int i, j, k; vertexNum = n, arcNum = e; for(i = 0; i < vertexNum; i++) vertex[i] = a[i]; for(i = 0;i < vertexNum; i++) for(j = 0; j < vertexNum; j++) arc[i][j] = 0;

数据结构图实验报告

数据结构教程 上机实验报告 实验七、图算法上机实现 一、实验目的: 1.了解熟知图的定义和图的基本术语,掌握图的几种存储结构。 2.掌握邻接矩阵和邻接表定义及特点,并通过实例解析掌握邻接 矩阵和邻接表的类型定义。 3.掌握图的遍历的定义、复杂性分析及应用,并掌握图的遍历方 法及其基本思想。 二、实验内容: 1.建立无向图的邻接矩阵 2.图的深度优先搜索 3.图的广度优先搜索 三、实验步骤及结果: 1.建立无向图的邻接矩阵: 1)源代码: #include "" #include "" #define MAXSIZE 30 typedef struct

{ char vertex[MAXSIZE]; ertex=i; irstedge=NULL; irstedge; irstedge=p; p=(EdgeNode*)malloc(sizeof(EdgeNode)); p->adjvex=i; irstedge; irstedge=p; } } int visited[MAXSIZE]; ertex); irstedge;

ertex=i; irstedge=NULL; irstedge;irstedge=p; p=(EdgeNode *)malloc(sizeof(EdgeNode)); p->adjvex=i; irstedge; irstedge=p; } } typedef struct node { int data; struct node *next; }QNode; ertex); irstedge;ertex); //输出这个邻接边结点的顶点信息 visited[p->adjvex]=1; //置该邻接边结点为访问过标志 In_LQueue(Q,p->adjvex); //将该邻接边结点送人队Q }

数据结构实验报告无向图

《数据结构》实验报告 ◎实验题目: 无向图的建立与遍历 ◎实验目的:掌握无向图的邻接链表存储,熟悉无向图的广度与深度优先遍历。 ◎实验内容:对一个无向图以邻接链表存储,分别以深度、广度优先非递归遍历输出。 一、需求分析 1.本演示程序中,输入的形式为无向图的邻接链表形式,首先输入该无向图的顶点数和边数,接着输入顶点信息,再输入每个边的顶点对应序号。 2.该无向图以深度、广度优先遍历输出。 3.本程序可以实现无向图的邻接链表存储,并以深度、广度优先非递归遍历输出。 4.程序执行的命令包括:(1)建立一个无向图的邻接链表存储(2)以深度优先遍历输出(3)以广度优先遍历输出(4)结束 5.测试数据: 顶点数和边数:6,5 顶点信息:a b c d e f 边的顶点对应序号: 0,1 0,2 0,3 2,4 3,4 深度优先遍历输出: a d e c b f 广度优先遍历输出: a d c b e f 二概要设计 为了实现上述操作,应以邻接链表为存储结构。 1.基本操作: void createalgraph(algraph &g) 创建无向图的邻接链表存储 void dfstraverseal(algraph &g,int v)

以深度优先遍历输出 void bfstraverseal(algraph &g,int v) 以广度优先遍历输出 2.本程序包含四个模块: (1)主程序模块 (2)无向图的邻接链表存储模块 (3)深度优先遍历输出模块 (4)广度优先遍历输出模块 3.模块调用图: 三详细设计 1.元素类型,结点类型和指针类型:typedef struct node { int adjvex; struct node *next; }edgenode; typedef struct vnode { char vertex; edgenode *firstedge; }vertxnode; typedef vertxnode Adjlist[maxvernum]; typedef struct { Adjlist adjlist; int n,e; }algraph; edgenode *s; edgenode *stack[maxvernum],*p; 2.每个模块的分析: (1)主程序模块 int main()

基于无向图的校园导游系统数据结构课程设计报告

重庆科技学院 课程设计报告 院(系):_电气与信息工程学院专业班级:计科普0902 设计地点(单位)____计算机基础自主学习中心I306___设计题目:_________校园导游咨询____________________

重庆科技学院 课程设计任务书设计题目:校园导游咨询

教研室主任:指导教师:向毅、陈刘奎、熊茜 2010年 12 月 20日

摘要 现代快节奏的生活使得都市人越来越渴望亲近自然,因此外出旅游现在被越来越多的都市人所看中,所以如何快速方便的找到我们想要的旅游景点的信息和最短路径就成了一个很重要的问题。 本设计基于图的结构,创建一个无向图,针对游客的实际需求,将重庆科技学院的景点编号、名称、介绍等信息放入到图的顶点当中并保存在景点文本文件当中,将两个景点的编号和它们之间的距离当作权值也保存到权值文本文件当中,利用迪杰斯特拉算法来求从一个景点到另一个景点的最短距离,利用strcmp();函数来查找景点,并显示出它的信息,从而解决了要查找景点信息和景点之间的最短路径的问题,最后按照显示屏上的提示进行相关的操作。 关键词:无向图、查找信息、最短距离、校园导游咨询

目录 摘要.................................................................................................................................................. II 1 设计内容和要求 (1) 1.1设计内容 (1) 1.1设计要求 (1) 2 概要设计 (2) 2.1 程序的模块图 (2) 2.2 主函数的概要设计 (3) 2.3 查找介绍函数的概要设计 (3) 2.4 查找最短路径函数的概要设计 (3) 2.5 退出函数的概要设计 (3) 3 详细设计 (4) 3.1 程序的流程图 (4) 3.2 主函数的详细设计 (5) 3.3 查找介绍函数的详细设计 (5) 3.4 查找最短路径函数的详细设计 (6) 3.5 退出函数的详细设计 (8) 3.6 数据结构的详细设计 (8) 4 软件测试 (10) 4.1 菜单的测试 (10) 4.2 查找景点简介的测试 (10) 4.3 查找两个景点之间的最短距离的测试 (11) 4.4 退出的测试 (11) 5 软件使用说明 (12) 6 致谢 (13) 7 参考文献 (14) 8 附录 (15)

(完整版)数据结构详细教案——图

数据结构教案第七章图

第7章图 【学习目标】 1.领会图的类型定义。 2.熟悉图的各种存储结构及其构造算法,了解各种存储结构的特点及其选用原则。 3.熟练掌握图的两种遍历算法。 4.理解各种图的应用问题的算法。 【重点和难点】 图的应用极为广泛,而且图的各种应用问题的算法都比较经典,因此本章重点在于理解各种图的算法及其应用场合。 【知识点】 图的类型定义、图的存储表示、图的深度优先搜索遍历和图的广度优先搜索遍历、无向网的最小生成树、最短路径、拓扑排序、关键路径 【学习指南】 离散数学中的图论是专门研究图性质的一个数学分支,但图论注重研究图的纯数学性质,而数据结构中对图的讨论则侧重于在计算机中如何表示图以及如何实现图的操作和应用等。图是较线性表和树更为复杂的数据结构,因此和线性表、树不同,虽然在遍历图的同时可以对顶点或弧进行各种操作,但更多图的应用问题如求最小生成树和最短路径等在图论的研究中都早已有了特定算法,在本章中主要是介绍它们在计算机中的具体实现。这些算法乍一看都比较难,应多对照具体图例的存储结构进行学习。而图遍历的两种搜索路径和树遍历的两种搜索路径极为相似,应将两者的算法对照学习以便提高学习的效益。 【课前思考】 1. 你有没有发现现在的十字路口的交通灯已从过去的一对改为三对,即每个方向的直行、左拐和右拐能否通行都有相应的交通灯指明。你能否对某个丁字路口的6条通路画出和第一章绪论中介绍的"五叉路口交通管理示意图"相类似的图? 2. 如果每次让三条路同时通行,那么从图看出哪些路可以同时通行? 同时可通行的路为:(AB,BC,CA),(AB,BC,BA),(AB,AC,CA),(CB,CA,BC)

数据结构实验—图实验报告

精品文档数据结构 实 验 报 告

目的要求 1.掌握图的存储思想及其存储实现。 2.掌握图的深度、广度优先遍历算法思想及其程序实现。 3.掌握图的常见应用算法的思想及其程序实现。 实验内容 1.键盘输入数据,建立一个有向图的邻接表。 2.输出该邻接表。 3.在有向图的邻接表的基础上计算各顶点的度,并输出。 4.以有向图的邻接表为基础实现输出它的拓扑排序序列。 5.采用邻接表存储实现无向图的深度优先递归遍历。 6.采用邻接表存储实现无向图的广度优先遍历。 7.在主函数中设计一个简单的菜单,分别调试上述算法。 源程序: 主程序的头文件:队列 #include #include #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int QElemType; typedef struct QNode{ //队的操作 QElemType data; struct QNode *next; }QNode,*QueuePtr; typedef struct { QueuePtr front; QueuePtr rear; }LinkQueue; void InitQueue(LinkQueue &Q){ //初始化队列 Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode)); if(!Q.front) exit(OVERFLOW); //存储分配失败 Q.front ->next =NULL; } int EnQueue(LinkQueue &Q,QElemType e) //插入元素e为Q的新的队尾元素{ QueuePtr p; p=(QueuePtr)malloc(sizeof(QNode)); if(!p) exit(OVERFLOW); p->data=e;

数据结构图的实现

实验7 无向图 一、问题描述 创建一个无向图,实现图的深度优先遍历和广度优先遍历等功能。 二、需求分析 1、简述程序的基本功能 本程序可以直接进行对图中元素的输入、输出、插入顶点、删除顶点、插入边、删除边、寻找邻接点以及深度优先遍历和广度优先遍历等功能。 2、输入的形式和输入值的范围 提供了一个功能选择界面,可以输入0~9进行功能的选择。 3、输出的形式 用户选择1选项时,程序会输出图的顶点数目和边的数目以及各条边顶点及权值; 用户选择2选项时,程序会提示输入创建图的顶点数和边数,然后逐个输入顶点,以及各条边; 用户选择3选项时,程序会提示输入顶点,然后输出该顶点的第一个邻接顶点; 用户选择4选项时,程序会提示输入顶点以及当前的邻接顶点,然后输出该顶点的下一个邻接顶点; 用户选择5选项时,程序会提示输入所要插入边的顶点以及权重; 用户选择6选项时,程序会提示输入所要插入的顶点; 用户选择7选项时,程序会提示输入所要删除的边的两个顶点; 用户选择8选项时,程序会提示输入所要删除的顶点 用户选择9选项时,程序提示输入遍历的起始顶点,然后输出深度遍历的结果; 用户选择0选项时,程序提示输入遍历的起始顶点,然后输出广度遍历的结果; 用户选择q选项时,程序结束。 4、测试数据要求 1)、选择选项时,不论输入几个字符,只读取第一个字符; 2)、选择选项时,输入的字符不能过多,若输入过多的字符就会出现异常; 3)、输入顶点时,每个元素只能是一个字符,输入多个字符会出错; 4)、在查找、插入、删除顶点或边时,会有容错提示; 5)、在查找和删除顶点或边时,若没有此元素,会给出提示; 三、概要设计 1、抽象数据类型 在该程序中,定义了一个类模板template class Graph,在该类中有*Vertices、**Edge、numEdges、numVertices 和maxVertices五个私有成员分别表示该类的顶点集、边集、现有边数、现有顶点数和顶点最大数目;自

数据结构--图的实验报告

图的实验报告 班级:电子091 学号:0908140620 姓名:何洁编号:19 (一)实验要求 创建一个图。能够实现图的输入,插入顶点和边,利用队列进行深度和广度遍历。(二)需求分析 功能:1,输入图的信息;2,插入一个顶点;3插入一个边;4,删除一个顶点;5,删除一个边;6,深度优先遍历;7,广度优先遍历;8退出。 (三)概要设计 本程序采用的是模板类,抽象数据类型有:T,E。 类: template class Graphmtx { friend istream & operator>>(istream& in,Graphmtx& G); friend ostream & operator<<(ostream& out, Graphmtx& G);//输出 public: Graphmtx(int sz=30, E max=0); //构造函数 ~Graphmtx () //析构函数 { delete []VerticesList; delete []Edge; } T getValue (int i) { //取顶点i 的值, i 不合理返回0 return i >= 0 && i <= numVertices ? V erticesList[i] : NULL; } E getWeight (int v1, int v2) { //取边(v1,v2)上权值 return v1 != -1 && v2 != -1 ? Edge[v1][v2] : 0; } int NumberOfEdges(){return numEdges;} //返回当前边数 int NumberOfVertices(){return numVertices;} //返回当前顶点 int getFirstNeighbor (int v); //取顶点v 的第一个邻接顶点 int getNextNeighbor (int v, int w); //取v 的邻接顶点w 的下一邻接顶点 bool insertVertex (const T& vertex); //插入顶点vertex bool insertEdge (int v1, int v2, E cost); //插入边(v1, v2),权值为cost

数据结构图练习题(附答案).doc

第七章 图 一、选择题 1.图中有关路径的定义是( )。【北方交通大学 2001 一、24 (2分)】 A .由顶点和相邻顶点序偶构成的边所形成的序列 B .由不同顶点所形成的序列 C .由不同边所形成的序列 D .上述定义都不是 2.设无向图的顶点个数为n ,则该图最多有( )条边。 A .n-1 B .n(n-1)/2 C . n(n+1)/2 D .0 E .n 2 【清华大学 1998 一、5 (2分)】【西安电子科技大 1998 一、6 (2分)】 【北京航空航天大学 1999 一、7 (2分)】 3.一个n 个顶点的连通无向图,其边的个数至少为( )。【浙江大学 1999 四、4 (4分)】 A .n-1 B .n C .n+1 D .nlogn ; 4.要连通具有n 个顶点的有向图,至少需要( )条边。【北京航空航天大学 2000 一、6(2分)】 A .n-l B .n C .n+l D .2n 5.n 个结点的完全有向图含有边的数目( )。【中山大学 1998 二、9 (2分)】 A .n*n B.n (n +1) C .n /2 D .n*(n -l ) 6.一个有n 个结点的图,最少有( )个连通分量,最多有( )个连通分量。 A .0 B .1 C .n-1 D .n 【北京邮电大学 2000 二、5 (20/8分)】 7.在一个无向图中,所有顶点的度数之和等于所有边数( )倍,在一个有向图中,所有顶点的入度之和等于所有顶点出度之和的( )倍。【哈尔滨工业大学 2001 二、3 (2分)】 A .1/2 B .2 C .1 D .4 8.用有向无环图描述表达式(A+B)*((A+B )/A ),至少需要顶点的数目为( )。【中山大学1999一、14】 A .5 B .6 C .8 D .9 9.用DFS 遍历一个无环有向图,并在DFS 算法退栈返回时打印相应的顶点,则输出的顶点序列是( )。 A .逆拓扑有序 B .拓扑有序 C .无序的 【中科院软件所 1998】 10.下面结构中最适于表示稀疏无向图的是( ),适于表示稀疏有向图的是( )。 A .邻接矩阵 B .逆邻接表 C .邻接多重表 D .十字链表 E .邻接表 【北京工业大学 2001 一、3 (2分)】 11.下列哪一种图的邻接矩阵是对称矩阵?( )【北方交通大学 2001 一、11 (2分)】 A .有向图 B .无向图 C .AOV 网 D .AO E 网 12. 从邻接阵矩???? ? ???? ?=01 0101 010A 可以看出,该图共有(①)个顶点;如果是有向图该图共有 (②) 条弧;如果是无向图,则共有(③)条边。【中科院软件所 1999 六、2(3分)】 ①.A .9 B .3 C .6 D .1 E .以上答案均不正确 ②.A .5 B .4 C .3 D .2 E .以上答案均不正确 ③.A .5 B .4 C .3 D .2 E .以上答案均不正确

相关文档
最新文档