queue.remove()和bfs需要java帮助
您好,我需要帮助了解bfs算法中我将元素设置为queue.remove()的部分,以及如何使用值设置元素。如果有人能为我解释一下,那会很有帮助。谢谢queue.remove()和bfs需要java帮助,java,breadth-first-search,Java,Breadth First Search,您好,我需要帮助了解bfs算法中我将元素设置为queue.remove()的部分,以及如何使用值设置元素。如果有人能为我解释一下,那会很有帮助。谢谢 class bfs { private Queue<Integer> queue; public bfs() { queue = new LinkedList<Integer>(); } public void bfs(int adjacency_matrix[][] , int source) {
class bfs
{
private Queue<Integer> queue;
public bfs()
{
queue = new LinkedList<Integer>();
}
public void bfs(int adjacency_matrix[][] , int source)
{
int number_of_nodes = adjacency_matrix[source].length-1;
int[] visited = new int[number_of_nodes +1];
int i, element;
visited[source] = 1;
queue.add(source);
while(!queue.isEmpty())
{
element =queue.remove();
i = element;
System.out.println(i+"\t");
while(i<=number_of_nodes)
{
if(adjacency_matrix[element][i] == 1 && visited[i] == 0)
{
queue.add(i);
visited[i] = 1;
}
i++;
}}
}
}
bfs类
{
专用队列;
公共bfs()
{
队列=新的LinkedList();
}
公共void bfs(整数邻接矩阵[][],整数源)
{
节点的整数=邻接矩阵[源].length-1;
int[]已访问=新int[节点的数量+1];
int i,元素;
访问[来源]=1;
queue.add(源);
而(!queue.isEmpty())
{
element=queue.remove();
i=元素;
System.out.println(i+“\t”);
虽然(i队列是一种先进先出的数据结构,但它有助于维护使用bfs在图中搜索的节点序列-因为在bfs中,被访问节点的直接邻居(我们称之为节点a)总是先排队,因此它们将被排队(在您的例子中为queue.remove())早于不是节点A直接邻居的节点
在您的代码中,邻接矩阵是一个2d方形数组,用于保持相邻关系。邻接矩阵[i][j]==1表示节点j是节点i的邻居。
element=queue.remove();-提供要访问的当前节点
队列。添加(i);将元素的邻居添加到队列中,以便以后可以访问它
您可以使用以下示例将其可视化:
你能提供一个背景信息吗?这有什么用,为什么要这样做,在这种情况下问题到底出在哪里?为了回答编码问题,这里,你有一个可能工作的算法,我没有试着让它运行,因为我真的不明白需要什么,因为你没有给出任何…很抱歉没有更清楚。这算法工作。它读取邻接矩阵和所有内容。我不理解的是element=queue.remove()是如何工作的在代码中工作,比如如何为其赋值。从Javadoc:检索并删除此队列的头。此方法与轮询的不同之处在于,如果此队列为空,它会引发异常。
因此基本上元素在被删除的队列头中读取。因此元素和我是相同的,直到我进入while循环并不断递增,这会更新访问的数据,等等。因此,如果在这种情况下,队列的头是source,那么source将=元素,我首先递增,然后转到条件并运行它?正确吗?因此,基本上,元素读取的是bein的队列头g已删除。所以元素和我是相同的,直到我进入while循环并不断递增,从而更新访问的,等等。因此,如果在这种情况下,队列的头是source,那么source将=元素,并且我首先会递增,然后转到条件并运行它?正确吗?老实说,我感觉有点不对劲很遗憾显示了图表和表格。为什么不在我给你的迭代表中添加一列来跟踪我是如何更新的?我建议你阅读bfs Wikipedia来理解bfs的概念。