如何使用队列在Java中实现BFS(HW算法简介)?
我尝试使用以下伪代码在Java中实现BFS算法:如何使用队列在Java中实现BFS(HW算法简介)?,java,eclipse,algorithm,data-structures,breadth-first-search,Java,Eclipse,Algorithm,Data Structures,Breadth First Search,我尝试使用以下伪代码在Java中实现BFS算法: 1. for each vertex u ∈ G.V - {s} // for each vertex except for the source 2. u.color = WHITE // (line 1 cont) in the graph 3. u.distance = ∞ 4. u.parent = NIL 5. source.color = GRAY 6. sour
1. for each vertex u ∈ G.V - {s} // for each vertex except for the source
2. u.color = WHITE // (line 1 cont) in the graph
3. u.distance = ∞
4. u.parent = NIL
5. source.color = GRAY
6. source.distance = 0
7. source.parent = NIL
8. Q = Ø
9. Enqueue (Q, source)
10. while Q != Ø
11. u = Dequeue(Q)
12. for each v ∈ G.Adj[u] // for each adjacent vertext
13. if v.color == WHITE
14. v.color = GRAY
15. v.distance = u.distance + 1
16. v.parent = u
17. Enqueue(Q, v)
18. u.color = BLACK
颜色表示每次访问该节点的时间:
COLORS: [2, 3, 2, 2, 2, 2, 2, 2]
DISTANCE: [2147483647, 0, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647]
PARENT: [0, 0, 0, 0, 0, 0, 0, 0]
COLORS: [3, 3, 2, 2, 2, 2, 2, 2]
dist[u] = 0
DISTANCE: [1, 0, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647]
PARENT: [1, 0, 0, 0, 0, 0, 0, 0]
QUEUE: []
COLORS: [3, 3, 3, 2, 2, 2, 2, 2]
dist[u] = 0
DISTANCE: [1, 0, 1, 2147483647, 2147483647, 2147483647, 2147483647, 2147483647]
PARENT: [1, 0, 1, 0, 0, 0, 0, 0]
QUEUE: [0]
COLORS: [3, 3, 3, 3, 2, 2, 2, 2]
dist[u] = 0
DISTANCE: [1, 0, 1, 1, 2147483647, 2147483647, 2147483647, 2147483647]
PARENT: [1, 0, 1, 1, 0, 0, 0, 0]
QUEUE: [0, 2]
COLORS: [3, 3, 3, 3, 3, 2, 2, 2]
dist[u] = 0
DISTANCE: [1, 0, 1, 1, 1, 2147483647, 2147483647, 2147483647]
PARENT: [1, 0, 1, 1, 1, 0, 0, 0]
QUEUE: [0, 2, 3]
COLORS: [3, 3, 3, 3, 3, 3, 2, 2]
dist[u] = 0
DISTANCE: [1, 0, 1, 1, 1, 1, 2147483647, 2147483647]
PARENT: [1, 0, 1, 1, 1, 1, 0, 0]
QUEUE: [0, 2, 3, 4]
COLORS: [3, 3, 3, 3, 3, 3, 3, 2]
dist[u] = 0
DISTANCE: [1, 0, 1, 1, 1, 1, 1, 2147483647]
PARENT: [1, 0, 1, 1, 1, 1, 1, 0]
QUEUE: [0, 2, 3, 4, 5]
COLORS: [3, 3, 3, 3, 3, 3, 3, 3]
dist[u] = 0
DISTANCE: [1, 0, 1, 1, 1, 1, 1, 1]
PARENT: [1, 0, 1, 1, 1, 1, 1, 1]
QUEUE: [0, 2, 3, 4, 5, 6]
我希望它最终会是这样的:
COLORS: [4, 4, 4, 4, 4, 4, 4, 4]
dist[u] = most recently removed from queue (not 0)
DISTANCE: [1, 0, 2, 3, 2, 1, 2, 3]
QUEUE: []
while循环中的for循环不正确。由于给定了一个邻接矩阵表示形式,因此将图[][]设为矩阵,则具有以下属性 图[i][j]==0,顶点i和j之间没有边; 图[i][j]==1,在顶点i和j之间有一条边 假设有n个顶点,则for循环应为:
for(int i = 0; i < n; i++) {
if(Graph[u][i] == 1) {
//put in the color/distance updates here
}
}
for(int i=0;i
您提到的其他示例(整数v:graph.adj[u])是图形的邻接列表表示形式。while循环中的for循环不正确。由于给定了一个邻接矩阵表示形式,因此将图[][]设为矩阵,则具有以下属性 图[i][j]==0,顶点i和j之间没有边; 图[i][j]==1,在顶点i和j之间有一条边 假设有n个顶点,则for循环应为:
for(int i = 0; i < n; i++) {
if(Graph[u][i] == 1) {
//put in the color/distance updates here
}
}
for(int i=0;i
您提到的其他示例(整数v:graph.adj[u])是图形的邻接列表表示形式。您可能不应该使用
返回距离当(!q.isEmpty())
循环时,中的code>。或者这仅仅是你的一部分出现了不好的凹痕?每个v∈ G.Adj[u]
写得不正确,因为您的v
循环根本没有使用u
,即不是“针对每个相邻的顶点”代码>行是我写错的。在实际代码中,它不在while循环中。如何编写for循环?我看到我实现它的方式没有任何意义,但我真的不确定(在Java中)如何实现它?我没有在您的代码中看到G.Adj[u]
(获取邻居)。要获得更多帮助,请发布您的代码,而不仅仅是发布的代码片段。看,您可能不应该使用返回dist当(!q.isEmpty())
循环时,中的code>。或者这仅仅是你的一部分出现了不好的凹痕?每个v∈ G.Adj[u]
写得不正确,因为您的v
循环根本没有使用u
,即不是“针对每个相邻的顶点”代码>行是我写错的。在实际代码中,它不在while循环中。如何编写for循环?我看到我实现它的方式没有任何意义,但我真的不确定(在Java中)如何实现它?我没有在您的代码中看到G.Adj[u]
(获取邻居)。要获得更多帮助,请发布您的代码,而不仅仅是发布的代码片段。看见
for(int i = 0; i < n; i++) {
if(Graph[u][i] == 1) {
//put in the color/distance updates here
}
}