您现在的位置:学赛首页 > 自考学院 > 数据结构与算法 > 正文
第7章图(算法设计)习题练习
http://www.educity.cn 作者:不详 来源: 2006年9月4日 发表评论 进入社区
7.16 试在无向图的邻接矩阵和邻接链表上实现如下算法:
  (1)往图中插入一个顶点
 (2)往图中插入一条边
 (3)删去图中某顶点
 (4)删去图中某条边

7.17 下面的伪代码是一个广度优先搜索算法,试以图7.29(下图)中的v0为源点执行该算法,请回答下述问题:

   
(1)对图中顶点vn+1,它需入队多少次?它被重复访问多少次?
(2)若要避免重复访问同一个顶点的错误,应如何修改此算法?
 void BFS(ALGraph *G,int k)
  {//以下省略局部变量的说明,visited各分量初值为假
   InitQueue(&Q);//置空队列
   EnQueue(&Q,k);//k入队
   while(!QueueEmpty(&Q)){
     i=DeQueue(&Q);//vi出队
     visited[i]=TRUE;//置访问标记
     printf("%c",G->adjlist[i].vertex;//访问vi
     for(p=G->adjlist[i].firstedge;p;p=p->next)
       //依次搜索vi的邻接点vj(不妨设p->adjvex=j)
       if(!visited[p->adjvex])//若vj没有访问过
         EnQueue(&Q,p->adjvex);//vj入队
    }//endofwhile
  }//BFS

7.18 试以邻接表和邻接矩阵为存储结构,分别写出基于DFS和BFS遍历的算法来判别顶点vi和vj(i<>j)之间是否有路径。

7.19 试分别写出求DFS和BFS生成树(或生成森林)的算法,要求打印出所有的树边。

7.20 写一算法求连通分量的个数并输出各连通分量的顶点集。

7.21 设图中各边的权值都相等,试以邻接矩阵和邻接表为存储结构,分别写出算法:
 (1)求顶点vi到顶点vj(i<>j)的最短路径
 (2)求源点vi到其余各顶点的最短路径
  要求输出路径上的所有顶点(提示:利用BFS遍历的思想)

7.22 以邻接表为存储结构,写一个基于DFS遍历策略的算法,求图中通过某顶点vk的简单回路(若存在)。

7.23 写一算法求有向图的所有根(若存在),分析算法的时间复杂度。

7.24 改写7.5节的算法Print,使输出的从源点到各终点的最短路径是正向的。(提示:使用栈暂存路径)

7.25 对7.6节的NonSuccFirstTopSort算法求精,分别以邻接矩阵和邻接表作为存储结构,写出其具体算法,并分析算法的时间。

7.26 设一个有向图DAG,试以邻接矩阵和邻接表作为存储结构,写出对7.6节的DFSTopSort求精算法。为什么有向图不是DAG时,该算法不能正常工作?

7.27 利用拓扑排序算法的思想写一算法判别有向图中是否存在有向环,当有向环存在时,输出构成环的顶点。