不知道用这种方法实现单源路径问题是否可以
来源:4-5 单源路径问题的编程实现
scanf莺曲
2019-07-28
(不好意思 第一次提问 可能表达不清 还请老师见谅)
这是老师的源代码 提的问题在注释里
public SingleSourcePath(Graph G, int s){
G.validateVertex(s);
this.G = G;
this.s = s;
visited = new boolean[G.V()];
pre = new int[G.V()]; //在这里预设pre的值为-1
dfs(s, s);
}
private void dfs(int v, int parent){ //这里不需要参数parent
visited[v] = true;
pre[v] = parent; // 删除这行代码
for(int w: G.adj(v))
if(!visited[w])
// pre[w] = v // 在这里添加代码
dfs(w, v);
}
不晓得这个方法是否可以
写回答
1回答
-
赞!完全没有问题:)
不过这样做,相当于对初始点s没有操作,所以需要在外面递归调用前,写一句 pre[s] = s(如果pre的初始值是-1,且你需要保证pre的语义的话:))
我在课程中的写法,在dfs每次遍历到一个顶点的时候,对当前顶点的pre赋值;
你的做法是在搜索相邻顶点的时候,对相邻顶点的pre赋值。但是,初始点不是任何点的相邻顶点,所以要单独考虑一下。
另外,在这里,我引用parent这个参数,也是为后续我们写环检测的代码打基础:)
其他没有任何问题:)大赞!:)
继续加油!:)
112019-07-29
相似问题