当前位置: 首页 > article >正文

C# 数据结构之【图】C#图

1. 图的概念

图是一种重要的数据结构,用于表示节点(顶点)之间的关系。图由一组顶点和连接这些顶点的边组成。图可以是有向的(边有方向)或无向的(边没有方向),可以是加权的(边有权重)也可以是无权的。

  • 顶点(Vertex):图中的基本单位,代表对象。
  • 边(Edge):连接顶点的线,可以是有向边或无向边。
  • 加权图(Weighted Graph):边上有权重(表示成本、距离等)。
  • 无向图(Undirected Graph):边没有方向,表示双向关系。
  • 有向图(Directed Graph):边有方向,表示单向关系。

2. 创建图的节点模型

class GraphNode
{
    public int Data { get; set; }
    public List<GraphNode> Neighbors { get; set; }

    public GraphNode(int data)
    {
        Data = data;
        Neighbors = new List<GraphNode>();
    }
}

3. 使用及遍历

using System;

namespace DataStructure
{
    class Program
    {
        static async Task Main(string[] args)
        {
            // 创建图的节点
            GraphNode node1 = new GraphNode(1);
            GraphNode node2 = new GraphNode(2);
            GraphNode node3 = new GraphNode(3);

            // 添加节点之间的边(无向图,所以相互添加)
            node1.Neighbors.Add(node2);
            node2.Neighbors.Add(node1);

            node2.Neighbors.Add(node3);
            node3.Neighbors.Add(node2);

            // 广度优先搜索遍历图并输出节点值
            Console.WriteLine("广度优先搜索遍历图:");
            BFS(node1);
        }

        static void BFS(GraphNode startNode)
        {
            Queue<GraphNode> queue = new Queue<GraphNode>();
            HashSet<GraphNode> visited = new HashSet<GraphNode>();

            queue.Enqueue(startNode);
            visited.Add(startNode);

            while (queue.Count > 0)
            {
                GraphNode currentNode = queue.Dequeue();
                Console.Write(currentNode.Data + " ");

                foreach (GraphNode neighbor in currentNode.Neighbors)
                {
                    if (!visited.Contains(neighbor))
                    {
                        queue.Enqueue(neighbor);
                        visited.Add(neighbor);
                    }
                }
            }
        }
    }
}

运行结果


http://www.kler.cn/a/409294.html

相关文章:

  • 使用go实现流式输出
  • Spring 框架七大模块(Java EE 学习笔记03)
  • 如何定位 Mysql 负载高
  • fastapi入门
  • windows C#-取消任务列表(上)
  • Python 版本的 2024详细代码
  • D74【 python 接口自动化学习】- python 基础之HTTP
  • 【Android】View的解析—滑动篇
  • 手机发展史介绍
  • 2024年11月最新 Alfred 5 Powerpack (MACOS)下载
  • 在ubuntu中查看csv
  • Windows RDP连接Ubuntu桌面
  • Spring 框架七大模块(Java EE 学习笔记03)
  • SpringMVC接收请求参数
  • Python学习——字符串操作方法
  • Unity Shader常见函数 内置Built-in/URP等效函数
  • 【WPF】Prism学习(九)
  • android-sdk 安装脚本
  • BERT的基本理念
  • Github工作流
  • 高级网络安全——移动IP (GSM认证和密钥协议)(week6)
  • Win11下载和配置VSCode(详细讲解)
  • ant vue3 form嵌套校验
  • C++ 优先算法 —— 长度最小的子数组(滑动窗口)
  • SD NAND 的 SDIO在STM32上的应用详解
  • 最新‌VSCode保姆级安装教程(附安装包)