需要帮助使用广度优先搜索(Java)获得邻接矩阵(图形)的第n级

Sha*_*ars 5 java algorithm directed-graph breadth-first-search adjacency-matrix

在此输入图像描述 在此输入图像描述

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;
    }
Run Code Online (Sandbox Code Playgroud)

你好!!给定源和目的地,我需要找到一条路径.就遍历图表而言,我的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站)

Mil*_*kic 0

问:本质上我想知道如何跟踪当前深度。

一种解决方案是创建一个带有附加字段的包装类,深度,正如 @svs 在他的回答中解释的那样。但是,有一个巧妙的技巧可以避免创建包装类,而且非常简单:

queue.add(src);
while(!queue.isEmpty())
{
     int size = queue.size();
     for(int i=0; i<size; i++)
     {
     .. //do processing for the current depth
     }
}
Run Code Online (Sandbox Code Playgroud)

在循环中,for对该级别的节点执行您打算执行的任何操作,包括将新元素放入队列中(即深度等于 current_depth + 1 的节点)。在循环中仅迭代queue.size()几次for将保证您仅处理当前级别的节点,并且while循环将保证所有级别都将被处理(或者仅处理其中的一些级别,如果您扩展停止循环的条件)。