从大到小的次序链接的,试分别写出从顶点0出发按深度优先搜索遍历得到的顶点序列和按广度优先搜索遍历得到的顶点序列。
已知图的邻接表表示的形式说明如下:
define MaxNum 50 //图的最大顶点数
typedef struct node{
int adjvex; //邻接点域
struct node*next; //链指针域
}EdgeNode; //边表结点结构描述
typedef struct{
char vertex; //顶点域
EdgeNode*firstedge;//边表头指针
}VertexNode; //顶点表结点结构描述
typedef struet{
VertexNode adjlist[MaxNum];//邻接表
int n,e; //图中当前的顶点数和边数
}ALGraph; //邻接表结构描述
下列算法输出图G的深度优先生成树(或森林)的边。阅读算法,并在空缺处填入合适的内容,使其成为一个完整的算法。
typedef enum{FALSE,TRUE}Boolean;
Boolean visited[MaxNurn];
void DFSForest(ALGraph*G){
int i;
for(i=0;i<G—>n;i++)visited[i]= (1) ;
for(i=0;i<G—>n;i++)if(!visited[i])DFSTree(G,i);
}
void DFSTree(ALGraph*G,int i){
EdgeNode*p;
visited[i]=TRUE;
p=G—>adjlist[i].firstedge;
while(p!=NULL){
if(!visited[p—>adjvex]){
printf("<%c,%c",G—>adjlist[i].vertex,
G—>adjlist[p—>adjvex].vertex);
(2) ;
}
(3) ;
}
}
给出图G,如图5—5所示: (1)画出G的邻接表表示图。 (2)根据你画出的邻接表,以顶点1为根,画出G的深度优先生成树和广度优先生成树。
图的输出结果为:(1,3)(2,6,7,4,5,8)(9,10)。
注:本算法中可以调用以下几个函数:firstadj(g,1,)——返回图g中顶点v的第一个邻接点的号码,若不存在,则返回0。nextadj(g,v,w)——返回图g中顶点v的邻接点中处于w之后的邻接点的号码,若不存在,则返回0。nodes(g)——返回图g中的顶点数。【合肥工业大学2000五、4(8分)】
A.邻接矩阵法存储图时,在不考虑压缩处理的情况下,所占有的存储空间大小只与图中顶点个数有关,而与图的边数无关
B.邻接表法只能用于有B图的存储,而邻接矩阵法对于有向图和无向图的存储都适用
C.存储无向图的邻接矩阵是对称的,因此也可以只存储邻接矩阵的下(或上)三角部分
D.对于一个具有N个顶点和
E.条边的无向图,若采用邻接表示,则表头向量的大小为N