图论04-【无权无向】-图的广度优先遍历

文章目录

  • [1. 代码仓库](#1. 代码仓库)
  • [2. 广度优先遍历图解](#2. 广度优先遍历图解)
  • 3.主要代码
  • [4. 完整代码](#4. 完整代码)

1. 代码仓库

https://github.com/Chufeng-Jiang/Graph-Theory

2. 广度优先遍历图解

3.主要代码

  1. 原点入队列
  2. 原点出队列的同时,将与其相邻的顶点全部入队列
  3. 下一个顶点出队列
  4. 出队列的同时,将与其相邻的顶点全部入队列
cpp 复制代码
private void bfs(int s){ //使用循环
    Queue<Integer> queue = new LinkedList<>();
    queue.add(s);
    visited[s] = true;
    while(!queue.isEmpty()){ //只要不是空就不停地出队
        int v = queue.remove(); // v记录队首元素 | 相邻顶点入队后,重新进入while循环,队首出队
        order.add(v); //添加到order数组中,order数组装的是按照BFS顺序遍历的顶点

        for(int w: G.adj(v))
            if(!visited[w]){
                queue.add(w); // 相邻的顶点入队列
                visited[w] = true;
            }
    }
}

复杂度:O(V+E)

4. 完整代码

输入文件

bash 复制代码
7 9
0 1
0 3
1 2
1 6
2 3
2 5
3 4
4 5
5 6
cpp 复制代码
package Chapt04_BFS_Path._0401_Graph_BFS_Queue;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.Queue;

public class GraphBFS {

    private Graph G;
    private boolean[] visited;

    private ArrayList<Integer> order = new ArrayList<>(); // 存储遍历顺序

    public GraphBFS(Graph G){
        this.G = G;
        visited = new boolean[G.V()];

        //遍历所有连通分量
        for(int v = 0; v < G.V(); v ++)
            if(!visited[v])
                bfs(v);
    }

    private void bfs(int s){ //使用循环
        Queue<Integer> queue = new LinkedList<>();
        queue.add(s);
        visited[s] = true;
        while(!queue.isEmpty()){ //只要不是空就不停地出队
            int v = queue.remove(); // v记录队首元素 | 相邻顶点入队后,重新进入while循环,队首出队
            order.add(v); //添加到order数组中,order数组装的是按照BFS顺序遍历的顶点

            for(int w: G.adj(v))
                if(!visited[w]){
                    queue.add(w); // 相邻的顶点入队列
                    visited[w] = true;
                }
        }
    }

    //取出遍历顺序
    public Iterable<Integer> order(){
        return order;
    }

    public static void main(String[] args){

        Graph g = new Graph("g1.txt");
        GraphBFS graphBFS = new GraphBFS(g);
        System.out.println("BFS Order : " + graphBFS.order());
    }
}
相关推荐
土司大王2 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec3 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z3 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠3 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光3 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
大模型码小白4 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
sel_94 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
Asize5 小时前
438. 找到字符串中所有字母异位词
算法
Asize5 小时前
283. 移动零
算法
船厂电气自动化ai大模型7 小时前
AI大模型与数学·第57课 傅里叶全套工具链综合实战:串联级数/连续变换/DFT/FFT,图像、音频、扩散模型完整例题
数据结构·人工智能·深度学习·算法·机器学习