对于这个程序,我需要一组输入,我需要存储在一个邻接矩阵中 . 我已经这样做了,所以我有一个邻接矩阵矩阵[11] [11] . 现在,使用这个矩阵,我需要执行深度优先搜索并返回pi值 .
我有伪代码,所以我认为我需要两种方法:DFS(图形)和DFS-VISIT(节点) . 但是,我实际上遇到了这个问题 . 我可以直接使用邻接矩阵或者我是否需要使用矩阵创建图形?任何实际编码的帮助将不胜感激 .
DFS(G)
for each u ∈ V[G] do
color[u] = WHITE
∏[u] = NIL
time = 0
for each u ∈ V[G] do
if color[u] = WHITE then
DFS-VISIT(u)
DFS-VISIT(u)
color[u] = GRAY
time++
d[u] = time
for each v ∈ Adj[u] do
if color[v] = WHITE then
∏[v] = u
DFS-VISIT(v)
color[u] = BLACK
time++
f[u] = time
2 回答
你在那里的伪代码似乎假设一个邻接列表 .
特别是这段代码:(对应于假定的代码块的缩进)
区别在于:使用邻接矩阵,所有顶点都在那里,并且通常使用0/1标志来指示当前顶点和目标顶点之间是否存在边缘 .
因此,您应该遍历邻接矩阵中该行的所有顶点,并且仅在标志设置为1时执行某些操作 .
那部分伪代码看起来像:
据我所知,伪代码的其余部分应该看起来相同 .
通常,首选代码DFS,假设图表被表示为邻接列表,因为结果的时间复杂度为
O(|V| + |E|)
. 但是使用邻接矩阵,时间复杂度变为O(|V|*|V|)
. 下面是假设邻接矩阵表示的dfs的实现:par []矩阵计算每个顶点的父节点,strt []和fin []矩阵为顶点添加时间戳 . 顶点从0开始编号 .