【发布时间】:2015-09-22 04:38:06
【问题描述】:
public int bfs(int maxDepth){
int src = 2;
int dest = 2;
int i;
int depth = 0;
int countPaths = 0;
int element;
queue.add(src);
while(!queue.isEmpty() && depth <= maxDepth)
{
element = queue.remove();
i = 0;
while(i < 5)
{
if(arr[element][i] > 0)
{
queue.add(i);
if(i == dest)
countPaths++;
}
i++;
}
}
queue.clear();
return countPaths;
}
你好!!给定一个来源和一个目的地,我需要找到一条路径。就遍历图而言,我的 BFS 算法运行良好。我的问题是让它在我想要的时候停止。我拿出了我正在增加深度的地方,所以我看起来不像一个完全的白痴。我希望有人能帮帮忙。本质上,我想知道如何跟踪当前深度。谢谢!
例子:
找出从 C 到 C 的路径数,最多 3 个停靠点。答案是两条路:
C -> D -> C(2 站)
C -> E -> B -> C(3 站)
示例 2:查找从 A 到 C 的路径数,最多 3 个停靠点。答案是三个路径。
A -> B -> C(2 站)
A -> D -> C(2 站)
A -> E -> B -> C ->(3 站)
【问题讨论】:
-
您好,看来您不能只使用一个变量
depth来衡量您的深度。您是否考虑过使用另一个队列来跟踪深度?我们称之为depth_queue。depth_queue中的每个元素都是queue中元素的深度。在我看来,检测何时终止有两种策略:(1)depth_queue的头部大于maxDepth(不确定是不是这样,你需要考虑一下)(2)这更确定:遍历整个depth_queue,如果每个元素都超过maxDepth,那么你可以终止
标签: java algorithm breadth-first-search directed-graph adjacency-matrix