算法——BFS

简介: 算法——BFS

一、算法简介

BFS是广度优先搜索(Breadth First Search)的缩写,是一种用于遍历或搜索图或树的算法。它从起始节点开始,逐层地访问其邻居节点,直到找到目标节点或遍历完整个图或树为止。

二、代码实现

在BFS算法中,通常使用队列来实现。以下是C#语言中实现BFS算法的示例代码:

using System;
using System.Collections.Generic;
public class Graph
{
    private int V; // 顶点的数量
    private List<int>[] adj; // 邻接表表示的图
    public Graph(int v)
    {
        V = v;
        adj = new List<int>[V];
        for (int i = 0; i < V; i++)
        {
            adj[i] = new List<int>();
        }
    }
    public void AddEdge(int v, int w)
    {
        adj[v].Add(w);
    }
    public void BFS(int s)
    {
        bool[] visited = new bool[V];
        Queue<int> queue = new Queue<int>();
        visited[s] = true;
        queue.Enqueue(s);
        while (queue.Count != 0)
        {
            s = queue.Dequeue();
            Console.WriteLine(s + " ");
            foreach (int i in adj[s])
            {
                if (!visited[i])
                {
                    visited[i] = true;
                    queue.Enqueue(i);
                }
            }
        }
    }
    public static void Main(string[] args)
    {
        Graph g = new Graph(4);
        g.AddEdge(0, 1);
        g.AddEdge(0, 2);
        g.AddEdge(1, 2);
        g.AddEdge(2, 0);
        g.AddEdge(2, 3);
        g.AddEdge(3, 3);
        Console.WriteLine("广度优先遍历结果:");
        g.BFS(2);
    }
}

在上述示例代码中,同样定义了一个Graph类来表示图结构。通过构造函数初始化邻接表adj,并提供AddEdge方法用于添加有向边。

然后,在BFS方法中,使用一个visited数组来跟踪已经访问过的节点,并使用一个队列来辅助进行广度优先搜索。首先将起始节点s标记为已访问并加入队列中。

然后,使用while循环从队列中取出一个节点s,并输出它的值。接下来,遍历节点s的所有邻居节点,并将未访问过的邻居节点加入队列中,并标记为已访问。

最后,在Main方法中创建一个Graph对象,添加有向边,并调用BFS方法进行广度优先遍历。

最后

祝您好运!

相关文章
|
7月前
|
存储 算法 容器
【优选算法专栏】专题十六:BFS解决最短路问题(二)
【优选算法专栏】专题十六:BFS解决最短路问题(二)
72 1
|
7月前
|
算法
【优选算法专栏】专题十六:BFS解决最短路问题(一)
【优选算法专栏】专题十六:BFS解决最短路问题(一)
67 0
|
7月前
|
消息中间件 算法 NoSQL
BFS - 常见算法问题
BFS - 常见算法问题
|
7月前
|
人工智能 算法 BI
【优选算法专栏】专题十八:BFS解决拓扑排序(一)
【优选算法专栏】专题十八:BFS解决拓扑排序(一)
53 0
|
7月前
|
存储 算法
【优选算法专栏】专题十六:BFS解决最短路问题---前言
【优选算法专栏】专题十六:BFS解决最短路问题---前言
63 1
|
7月前
|
算法
【优选算法专栏】专题十八:BFS解决拓扑排序--前言
【优选算法专栏】专题十八:BFS解决拓扑排序--前言
56 1
|
6月前
|
存储 机器学习/深度学习 算法
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
第十五届蓝桥杯pb组国赛E题[马与象] (15分)BFS算法 详解
66 3
|
6月前
|
存储 算法 Java
Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。
【6月更文挑战第21天】Java中,树与图的算法涉及二叉树的前序、中序、后序遍历以及DFS和BFS搜索。二叉树遍历通过访问根、左、右子节点实现。DFS采用递归遍历图的节点,而BFS利用队列按层次访问。以下是简化的代码片段:[Java代码略]
50 4
|
2月前
|
机器学习/深度学习 存储 算法
数据结构与算法——BFS(广度优先搜索)
数据结构与算法——BFS(广度优先搜索)
|
4月前
|
存储 算法
BFS算法的实现
BFS算法的实现
55 1