【发布时间】:2013-11-25 01:57:32
【问题描述】:
我有一个无向连通图。我已经使用一个二维数组的邻接矩阵来实现它。
据我了解,DFS 在兄弟节点之前访问子节点。 BFS 在孩子之前拜访兄弟姐妹。
我是这样实现这两个的:
public void DFT(int firstVertex) {
connectedVertices = 0;
int v;
Stack<Integer> stack = new Stack<Integer>();
for (int i = 0; i < numVertices; i++) {
if(vertex[i] != null){
vertex[i].setPushed(false);
}
}
stack.push(firstVertex);
connectedVertices++;
vertex[firstVertex].setPushed(true);
while(!stack.isEmpty()){
v = stack.pop();
vertex[v].visit();
for (int i = 0; i < numVertices; i++) {
if(adj[v][i] != 0 && !vertex[i].getPushed()){
stack.push(i);
connectedVertices++;
vertex[i].setPushed(true);
}
}
}
}
public void BFT(int firstVertex) {
connectedVertices = 0;
int v;
Queue<Integer> queue = new LinkedList<Integer>();
for (int i = 0; i < numVertices; i++) {
if(vertex[i] != null){
vertex[i].setPushed(false);
}
}
queue.add(firstVertex);
connectedVertices++;
vertex[firstVertex].setPushed(true);
while(!queue.isEmpty()){
v = queue.remove();
vertex[v].visit();
for (int i = 0; i < numVertices; i++) {
if(adj[v][i] != 0 && !vertex[i].getPushed()){
queue.add(i);
connectedVertices++;
vertex[i].setPushed(true);
}
}
}
}
因为这些方法只接受一个参数,即起始顶点。如果我被要求将 DFS 和 BFS 从一个节点提供给另一个节点怎么办?这是一个连接无向图的简单示例。
如果要求我执行从 D 到 E 的 DFS,是 D、C、A、E 还是 D、E。我认为 DFS 和 BFS 必须访问每个节点,在这种情况下 B 无法访问。我不知道我应该如何改变我目前的方法来满足这些要求。
【问题讨论】:
标签: java data-structures graph depth-first-search breadth-first-search