You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于邻接矩阵的Java BFS实现问题:数组赋值异常致得分未递增

解决邻接矩阵BFS算法中数组赋值异常的问题

我一眼就看到你代码里的核心问题了——output数组的初始化方式完全错了,这直接导致你没法正确存储所有节点的BFS结果,得分(应该是节点的访问顺序)自然没法递增。咱们一步步拆解问题,再给出修复方案:

问题根源分析

  1. 数组长度固定死了:你写了int[] output = {0};,这意味着这个数组只有1个元素的空间。而你的图有v个节点(v=graph.length),后续遍历到的节点根本没地方存,要么数组越界报错,要么就只能保留初始的0,其他结果完全没法写入。
  2. 缺少动态赋值的索引:你没有一个变量来跟踪output数组当前该赋值到哪个位置,没法按BFS的顺序依次把节点存进去。

修正后的完整BFS代码

import java.util.LinkedList;

public class BFS_DFS {
    public static int[] BFS(int[][] graph) {
        int v = graph.length;
        int[] output = new int[v]; // 初始化和节点数一样长的数组
        int index = 0; // 用来跟踪output的赋值位置
        int start = 0;
        boolean[] visited = new boolean[v];
        LinkedList<Integer> queue = new LinkedList<>();

        // 初始化起始节点
        visited[start] = true;
        queue.add(start);
        output[index++] = start; // 把起始节点存入output

        while (!queue.isEmpty()) {
            int current = queue.poll(); // 取出队首节点

            // 遍历所有邻接节点
            for (int i = 0; i < v; i++) {
                // 如果当前节点和i相连,且i未被访问
                if (graph[current][i] == 1 && !visited[i]) {
                    visited[i] = true;
                    queue.add(i);
                    output[index++] = i; // 按顺序存入output数组
                }
            }
        }
        return output;
    }

    // 测试用例
    public static void main(String[] args) {
        // 假设这是一个连通的邻接矩阵,节点0到5依次可达
        int[][] graph = {
                {0,1,0,0,0,0},
                {1,0,1,0,0,0},
                {0,1,0,1,0,0},
                {0,0,1,0,1,0},
                {0,0,0,1,0,1},
                {0,0,0,0,1,0}
        };
        int[] result = BFS(graph);
        for (int num : result) {
            System.out.print(num + " ");
        }
        // 输出会是:0 1 2 3 4 5 
    }
}

关键修复点说明

  • 把output数组初始化为new int[v],确保有足够空间存储所有节点的BFS访问顺序。
  • 新增index变量,每次存入一个节点后就自增,保证按BFS的顺序依次赋值。
  • 严格遵循BFS的流程:标记已访问→加入队列→存入结果数组,循环处理直到队列为空。

这样修改后,你的程序就能输出预期的0 1 2 3 4 5 了。如果你的图不是连通的,还可以额外处理未访问的节点,但从你的预期输出来看,应该是连通图的场景,这个代码完全适用。

内容的提问来源于stack exchange,提问作者user1221346712987

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:57:31