iT邦幫忙

2023 iThome 鐵人賽

DAY 25
0
Software Development

C# 學習之路系列 第 26

[DAY25] C#基礎與實作(常見演算法-廣度優先搜尋)

  • 分享至 

  • xImage
  •  

C# 程式基礎

常見演算法:

廣度優先搜尋 (Breadth-First Search, BFS):

  • 基本概念:
    • BFS使用佇列(Queue)來實現,它以逐層的方式搜索圖中的節點。
    • 基本思想是從起始節點開始,將其加入佇列,然後依次處理佇列中的節點,並將其相鄰的未訪問節點加入佇列。
    • 確保首先處理最接近起始節點的節點,然後逐漸向外擴展,直到找到目標節點或遍歷完整個圖。
  • 步驟:
    1. 建立一個空佇列,將起始節點加入佇列。
    2. 標記起始節點為已訪問。
    3. 進入迴圈,處理佇列中的節點:
      • a. 取出佇列的第一個節點,這個節點稱為當前節點。
      • b. 對當前節點進行相關處理(例如,輸出節點的值)。
      • c. 對當前節點的所有未訪問鄰居進行以下操作:
        • i. 標記鄰居節點為已訪問。
        • ii. 將鄰居節點加入佇列。
    4. 重複步驟3直到佇列變為空或找到目標節點。
  • 程式實作:
    using System;
    using System.Collections.Generic;
    
    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.Write(s + " ");
    
                foreach (int i in adj[s])
                {
                    if (!visited[i])
                    {
                        visited[i] = true;
                        queue.Enqueue(i);
                    }
                }
            }
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            Graph g = new Graph(7);
            g.AddEdge(0, 1);
            g.AddEdge(0, 2);
            g.AddEdge(1, 3);
            g.AddEdge(1, 4);
            g.AddEdge(2, 5);
            g.AddEdge(2, 6);
    
            Console.WriteLine("從節點0開始的廣度優先搜尋結果:");
            g.BFS(0);
        }
    }
    
    

程式實作練習:

  • leetcode-1323. Maximum 69 Number
    https://ithelp.ithome.com.tw/upload/images/20231006/20163217LfzpvMitNO.png
      以上的解法不一定是最好的,但可以依照上方的方法學習、練習,
     並期望自己找到更好的方法,持續進步><

參考來源

  1. ChatGPT
  2. C#最強入門邁向頂尖高手之路王者歸來
  3. w3schools C#
  4. 圖解資料結構 × 演算法:運用C#
  5. leetcode
  6. algo

期望挑戰30天持續更新成功 ~ DAY25


上一篇
[DAY24] C#基礎與實作(常見演算法-深度優先搜尋)
下一篇
[DAY26] C#基礎與實作(WinForms開發-畫資料圖表)
系列文
C# 學習之路31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言