C#语言实现广度优先搜索(Breadth-First Search,BFS)算法

广度优先搜索(Breadth-First Search,BFS)是一种遍历或搜索树或图的算法。以下是使用C#实现广度优先搜索的示例:

using System;
using System.Collections.Generic;

class Graph
{
    private int vertices; // 顶点数量
    private List<int>[] adj; // 邻接表

    // 构造函数
    public Graph(int v)
    {
        vertices = 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);
    }

    // BFS算法
    public void BFS(int start)
    {
        // 标记所有顶点为未访问
        bool[] visited = new bool[vertices];

        // 创建一个队列用于BFS
        Queue<int> queue = new Queue<int>();

        // 标记起始节点为已访问并入队
        visited[start] = true;
        queue.Enqueue(start);

        while (queue.Count != 0)
        {
            // 从队列中取出一个节点
            start = queue.Dequeue();
            Console.Write(start + " ");

            // 获取该节点的所有邻接节点
            foreach (int next in adj[start])
            {
                if (!visited[next])
                {
                    visited[next] = true;
                    queue.Enqueue(next);
                }
            }
        }
    }

    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("从顶点 2 开始进行广度优先搜索:");

        g.BFS(2);
    }
}

在这个示例中:

  1. Graph 类表示一个图,使用邻接表表示边。
  2. AddEdge 方法用于向图中添加边。
  3. BFS 方法实现广度优先搜索算法,打印出从起始节点开始的遍历顺序。
  4. Main 方法中,创建一个包含 4 个顶点的图,并添加了一些边。然后从顶点 2 开始执行 BFS 算法,输出遍历顺序。

你可以根据需要调整图的结构和起始节点,以测试不同的图和起始点。

广度优先搜索(Breadth-First Search,BFS)是一种遍历或搜索树或图的算法。以下是使用C#实现广度优先搜索的示例:

using System;
using System.Collections.Generic;

class Graph
{
    private int vertices; // 顶点数量
    private List<int>[] adj; // 邻接表

    // 构造函数
    public Graph(int v)
    {
        vertices = 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);
    }

    // BFS算法
    public void BFS(int start)
    {
        // 标记所有顶点为未访问
        bool[] visited = new bool[vertices];

        // 创建一个队列用于BFS
        Queue<int> queue = new Queue<int>();

        // 标记起始节点为已访问并入队
        visited[start] = true;
        queue.Enqueue(start);

        while (queue.Count != 0)
        {
            // 从队列中取出一个节点
            start = queue.Dequeue();
            Console.Write(start + " ");

            // 获取该节点的所有邻接节点
            foreach (int next in adj[start])
            {
                if (!visited[next])
                {
                    visited[next] = true;
                    queue.Enqueue(next);
                }
            }
        }
    }

    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("从顶点 2 开始进行广度优先搜索:");

        g.BFS(2);
    }
}

在这个示例中:

  1. Graph 类表示一个图,使用邻接表表示边。
  2. AddEdge 方法用于向图中添加边。
  3. BFS 方法实现广度优先搜索算法,打印出从起始节点开始的遍历顺序。
  4. Main 方法中,创建一个包含 4 个顶点的图,并添加了一些边。然后从顶点 2 开始执行 BFS 算法,输出遍历顺序。

你可以根据需要调整图的结构和起始节点,以测试不同的图和起始点。

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在