为什么这个不起作用?
V是折点数-我正在从文本文件中读取图形-S是要开始的顶点-始终设置为1
我试图以迭代和递归的形式显示图形[img下面],出于某种原因,我得到了两个完全不同的输出!
public void DF_iteration(int s) {
// Create a stack for DFS
Stack<Integer> stack = new Stack<>();
// Push the current source node
stack.push(s);
// variables
id = 0;
// Initially mark all vertices as not visited
for (int v = 1; v <= V; ++v) {
visited[v] = 0;
}
while(!stack.isEmpty()) {
// Pop a vertex from stack and print it
int v = stack.pop();
// Stack may contain same vertex twice. So
// we need to print the popped item only
// if it is not visited.
if(visited[v] == 0) {
visited[v] = ++id;
System.out.println("DF just visited vertex " + toChar(v));
for (int u = 1; u <= V; ++u) {
if (visited[u] == 0) {
stack.push(u);
}
}
}
}
}
Output
DF just visited vertex A
DF just visited vertex K
DF just visited vertex J
DF just visited vertex I
DF just visited vertex H
DF just visited vertex G
DF just visited vertex F
DF just visited vertex E
DF just visited vertex D
DF just visited vertex C
DF just visited vertex B
Recursion
public void DF(int s) {
id = 0;
for (int v = 1; v <= V; ++v) {
visited[v] = 0;
}
dfVisit(0, s);
}
public void dfVisit(int prev, int v) {
visited[v] = ++id;
System.out.println("Visited vertex " + toChar(v));
for (int u = 1; u <= V; ++u) {
if (visited[u] == 0) {
dfVisit(v, u);
}
}
}
Output
Visited vertex A
Visited vertex B
Visited vertex C
Visited vertex D
Visited vertex E
Visited vertex F
Visited vertex G
Visited vertex H
Visited vertex I
Visited vertex J
Visited vertex K
这是我正在尝试为迭代和递归执行的伪代码这是adj和访问过的]
// adj[] is the adjacency lists array
private Node[] adj;
// used for traversing graph
private int[] visited;
您不应将每个顶点的邻接都作为伪代码访问]
获得邻接点到顶点。
具有堆栈的第一个将从V-1到1
,但是第二个将从1变为V-1