首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# Visio 二次開發:電氣線路停電分析邏輯(二)——遞迴構建拓撲樹逐步演示

     編輯:關於C語言

資料來源:Equipment + ConnectionShapes 關係表

單一飛達分析,僅有一個 PID=-1 (根節點)。目標:找出每個設備的 ID 及其父 ID (上游設備)。

逐步構建演示

步驟 1:尋找根節點

ID  PID
1   -1

步驟 2:尋找設備 1 下游

關係表中 Equipment=1 的 ConnectionShapes 含 -1, 2。排除上游 -1,得 2。

ID  PID
1   -1
2   1

步驟 3:尋找設備 2 下游

Equipment=2 關聯 1, 3, 8, 7, 10。排除上游 1,得 3, 8, 7, 10。

ID  PID
1   -1
2   1
3   2
8   2
7   2
10  2

步驟 4:遞迴分析 3, 8, 7, 10 → 先分析 3 下游

Equipment=3 關聯 2, 4, 11。排除上游 2,得 4, 11。

ID  PID
1   -1
2   1
3   2
8   2
7   2
10  2
4   3
11  3

演算法核心邏輯


// 偽代碼
function BuildTree(rootId):
    tree.Add(rootId, -1)
    Queue q = new Queue()
    q.Enqueue(rootId)
    
    while q not empty:
        current = q.Dequeue()
        children = GetDownstreamDevices(current) // 查關係表
        foreach child in children:
            if child != GetUpstreamDevice(current): // 排除父節點
                tree.Add(child, current)
                q.Enqueue(child)

關鍵點總結

  • 廣度優先 (BFS) 或深度優先 (DFS) 均可,本例近似 BFS
  • 核心難點:排除上游設備,避免回溯形成環
  • 關係表為雙向連接,必須識別方向性 (上游 vs 下游)
  • 單一飛達場景樹結構唯一;多飛達需 BelongTo 区分
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved