作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个无向连通图。我使用邻接矩阵来实现它,它是一个二维数组。
据我了解,DFS 在访问兄弟节点之前访问子节点。 BFS 在 child 之前拜访 sibling 。
我这样实现了这两个:
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就无法访问。我不知道应该如何改变当前的方法来满足这些要求。
最佳答案
我不确定您先访问 C 还是 E 是否真的重要。他们都是D的 child 吧?这是特定于实现的行为,DFS 不定义您首先访问哪个 child 。
在 DFS 中,如果您先选择子 C,那么您应该在访问 E 之前访问 A。
在 BFS 中,您应该在访问 A 或 B 之前访问过 E 和 C。
关于java - 图中两个节点之间的深度优先搜索和广度优先搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20183668/
所以我有一个有向图,我添加了顶点和边。该图表示机场和它们之间的航类。当我运行广度优先或深度优先搜索以找到两个机场之间的路径时,我第一次得到了正确的答案,但是当我第二次使用完全相同的机场运行它时,它找不
我是一名优秀的程序员,十分优秀!