图的深度优先搜索:
1.将最初访问的顶点压入栈;
2.只要栈中仍有顶点,就循环进行下述操作:
(1)访问栈顶部的顶点u;
(2)从当前访问的顶点u 移动至顶点v 时,将v 压入栈。如果当前顶点u 不存在未访问的相邻矩阵,则将u 从栈中删除;
主要的几个变量:
color[n] | 用WHITE、GRAY、BLACK 中的一个来表示顶点i 的访问状态 |
M[n][n] | 邻接矩阵, 如果存在顶点i 到顶点j 的边,则M[i][j]为true |
Stack S | 栈, 暂存访问过程中的顶点 |
其中color 数组中, 白色代表“未访问的顶点”, 灰色代表“访问过的顶点”(虽然被访问过了,但仍然可能留有通往未访问顶点的边), 黑色代表”访问结束的顶点”;