习题六和上机答案.docVIP

  • 1
  • 0
  • 约1.65万字
  • 约 20页
  • 2019-09-16 发布于浙江
  • 举报
习题六 6-1 在下图所示的有向图中,试给出 (1) 每一个顶点的入度和出度; (2) 邻接矩阵; (3) 邻接表; (4) 强连通分量。 题6.1 解: 顶点 1 2 3 4 5 6 入度 2 2 1 1 2 3 出度 1 2 2 3 1 2 邻接矩阵: 邻接表: 1 2 3 4 5 6 强连通分量:1、6、2、4、5。 6-2 在下图所示的有向图中: 该图是强连通的吗?若不是,则给出其强连通分量。 给出图的邻接矩阵、邻接表、逆邻接表。 给出每个顶点的度、入度和出度。 解: (1)、是强连通图。 (2)、邻接矩阵: 邻接表: 1 2 3 4 逆邻接表: 1 2 3 4 (3)、 结点 1 2 3 4 入度 1 1 1 2 出度 2 1 1 1 度 3 2 2 3 6-3 n个顶点的强连通图至少有多少条边,这样的有向图是什么形状? 解:n-1条。环行。 6-4 对于下图所示的带权的有向图 (1)写出邻接矩阵; (2)邻接表。 解:(1)、邻接矩阵: (2)、邻接表: 1 2 3 4 5 6 6-5 分别写出用深度优先搜索法和广度优先搜索法遍历具有6个顶点的完全图的序列。 假设都以v1为出发点。 解: 深度优先遍历:v1,v2,v3,v4,v5,v6 广度优先遍历:v1,v2,v3,v4,v5,v6 6-6 对下图所示的有向图,从顶点v1出发,分别画出其深度和广度生成树。 题6.6 解:DFS: V V21111 V311111 V411111 V511111 V611 V711111 V811111 V111111 BFS: V V11111 V311111 V711111 V511111 V611111 V811111 V211111 V411111 6-7 实现在邻接表上删除一条边,删除一个结点的算法。 解: Void delete_side(ALGraph *G,int A,int B)/*A,B为边的两个结点的下标*/ { Arcnode *p,*q; P=q=G-vertices[A].firstarc;/*使p,q指向结点A的后续*/ While(p-adjvex!=Bp!=next) { q=p; p=p-next; }/*寻找边A,B,p指向B,q指向p的前一个*/ If(p==NULL) { printf(“input error\n”); return; }/*删除结点p*/ q-next=p-next; G?arcnum--;/*结点数减一*/ Free(p); Free(q); } Void delete_drop(ALGraph *G,int A)/*A是要删除的结点下标*/ { Int I; Arcnode *p,*q; For(i=A;iG-vexnum;i++) /*删除结点A*/ G-vertices[i]=G-vertices[i+1]; G-vexnum--; For(i=1;i=G-vexnum;i++)/*删除结点的前驱*/ { P=q=G-vertices[i].firstarc; While(p!=NULL) { If(p-adjvexA)/*查看是否有结点的信息,有则删除*/ p-adjvex--; else if(p-adjvex==A)/*删除结点*/ q-next=p-next; Q=p; p=p-next; } { Free(p); Free(q); } 6-8 实现计算有向图中各顶点的入度的算法。设有向图用邻接表作为存储结构。 解: Void InDegree(ALGraph *G) { Int I,count[maxsize];/*记录与下标相同的结点的入度数组*/ Arcnode *p; For(i=1;i=G-vexnum;i++)/*数组初始化*/ Count[i]=0; For(i=1;i=G-vexnum;i++) { P=G-vertices[i].firstarc; While(p!=NULL)/*使相对应的数组每一次加一*/ { Count[p-adjvex]++; p=p-next; } } For(i=1;i=G-v

文档评论(0)

1亿VIP精品文档

相关文档