題目看似複雜,但應該不難想到使用圖(Graph)相關的演算法處理,不外乎兩種:DFS/BFS。
我們把所有的輸入端口、邏輯閘、輸出端口都看成是節點,以此建立一個有向圖,題目要求是終端的訊號,從終端開始往前推會比從端口出發來的有效率,因此把每個終端當做根節點(Root),作DFS一直遍歷到葉節點,就能求出終端的訊號。
以下程式碼為資料的輸入,圖的儲存方式使用Adjacency Lists。
若還沒學過map可以用二維陣列替代。
接者開始DFS,進入節點時,我們會遇到三種狀況:節點為輸入端口、邏輯閘、輸出端口
新增一個一維陣列 mx[i],表示以i為根節點的最大延遲時間->
同時計算訊號v[i]
要注意這裡無論求訊號或延遲時間,必須先DFS再計算(先DFS才能先求出子節點的資料)
ios::[2]