当前位置:文档之家› 实验四:图的深度优先与广度优先遍历

实验四:图的深度优先与广度优先遍历

实验报告
再从这些顶点出发,访问它们还未访问过的邻接点,…,如此做下去,直到图中所有顶点都被访问过为止。

2、
(1)将没有前驱(入度为零)的顶点进栈。

(2)从栈中退出栈顶元素输出,并把该顶点引出的所有弧删去,即把它的各个邻接点的入度减1,同时将当前已输出的顶点个数加1.
(3)将新的入度为零的顶点再进栈。

(4)重复(2)、(2)两步,直到栈为空为止。

此时或者已经输出前部顶点,或者剩下的顶点中没有入度为零的顶点。

3、
设置一个n*n的矩阵A(k),其中除对角线元素为0外,其他元素A(k)[i][j]表示顶点i到顶点j的路径长度,k表示运算步骤。

开始时k = -1,A(-1)[i][j] = arcs[i][j],即A为图的邻接矩阵。

以后逐步尝试在原路径中加入其他顶点作为中间点,如果增加中间点顶点后,得到的路径比原来的路径短,则以此新路径代替原来路径,修改矩阵元素。

具体做法为:第0步让所有路径上加入中间点0,去A[i][j]与A[i][0] + A[o][j]中较小的值作A[i][j]的新值,完成后得到A(0)如此进行下去,当第n-1步完成后,得到A(n-1),A(n-1)即为所求的结果,A(n-1)[i][j]表示从i 到j路径上的中间顶点的序号小于或等于n-1的最短路径的长度,即A(n-1)[i][j]表示从i到j 的最短路径的长度。

算法的实现和测试结果:包括算法运行时的输入、输出,实验中出现的问题及解决办法等
1、
2、
3、
算法时间复杂度分析
1、
深度优先遍历:O(n*n).
广度优先遍历:O(n*n).
2、
O(n+e).
3、
O(n*n*n).
四、收获与体会
不想说什么,这章的程序太难了,每次一想起来数据结构还没做就烦,前两个题基本上一天能做一道题,第三题也就是骗骗OJ,实际上还有个小BUG,等有空再写个真正符合题意的程序吧。

五、源代码清单。

相关主题