堆疊應用 四 開關盒佈線

2022-04-06 02:49:36 字數 1452 閱讀 7625

為了解決開關盒佈線問題,我們注意到,當兩個針腳互連時,其電線把佈線區分成兩個分割槽。例如,當 ( 1 , 4 )互連時,就得到了兩個分割槽,乙個分割槽包含針腳 2和3,另乙個分割槽包含針腳5 ~ 8。現在如果有乙個網組,其兩個針腳分別位於這兩個不同的分割槽,那麼這個網組是不可以佈線的,因而整個電路也是不可佈線的。如果沒有這樣的網組,則可以繼續判斷每個獨立的分割槽是不是可佈線的。為此,可以從乙個分割槽中取出乙個網組,利用該網組把這個分割槽又分成兩個子分割槽,如果任乙個網組的兩個針腳都分布在同乙個子分割槽之中(即不會出現兩個針腳分別位於兩個子分割槽的情形),那麼這個分割槽就是可佈線的。

為了實現上述策略,可以按順時針或反時針方向沿著開關盒的外圍進行遍歷,可從任意乙個針腳開始。例如,如果按順時針方向從針腳 1 開始遍歷圖 5-7a 中的針腳,那麼將依次檢查針腳1, 2, ..., 8。針腳1 和4屬於同乙個網組,那麼在針腳 1至針腳4之間出現的所有針腳構成了第乙個分割槽,而在針腳 4至針腳 1 之間出現的所有針腳構成了第二個分割槽。把針腳 1 放入堆疊,然後繼續處理,直至遇到針腳 4。這個過程使我們僅在處理完乙個分割槽之後才能進入下乙個分割槽。下乙個針腳是針腳 2,它與針腳 3同屬乙個網組,它們又把當前分割槽分成兩個子分割槽。與前面的做法一樣,把針腳2放入堆疊,然後繼續處理直至遇到針腳3。由於針腳3與針腳2屬同乙個網組,而針腳2正處在棧頂,這表明已經處理完乙個子分割槽,因此可將針腳 2從棧頂刪除。接下來將到針腳4,由於與之互連的針腳 1正處在棧頂,因此當前的分割槽已經處理完畢,可從棧頂刪除針腳1 。按照這種方法繼續進行下去,直至檢查完八個針腳,堆疊變空,所建立的分割槽都已處理完畢為止。

而對於不可佈線的開關盒,最後堆疊不會為空。

堆疊的實現見:堆疊的鍊錶方式實現

1 #include "

checkbox.h

"2 //net儲存開關盒針腳的分組編號,n為針腳個數

3bool checkbox(int net,intn)4

1011

for (int i = 0; i < n;++i)

1218

19if (s.top()==net[i])//等於棧頂,說明可以直接走線

2024

else

2528}29

30return

s.isempty();//堆疊空說明無交叉可佈線

31 }

1 #include "

checkbox.h

"2 #include 3

4int

main()

5; 78

if (checkbox(net, 8))9

12else

1316

17 system("

pause");

1819

return0;

20 }

輸出:

Django技術詳解(四)開發template

templates,在django其實是乙個乙個的html檔案,它使用了django模板語言 django template language,dtl 也可以第三方模板 如jinja2 步驟如下 1 在應用的根目錄下建立名叫templates的目錄 2 在該目錄下建立html檔案 3 在views....

設計模式 (四)開放 封閉原則

總結 開放 封閉原則,是說軟體實體應該可以擴充套件,但是不可以修改。怎樣的設計才能面對需求的改變卻可以保持相對穩定,從而使得系統可以在第乙個版本以後不斷推出新的版本呢?無論模組是多麼的 封閉 都會存在一些無法對之封閉的變化。既然不可能完全封閉,設計人員必須對於他設計的模組應該對哪種變化封閉做出選擇。...

核心移植 四 開啟全域性中斷

void rt hw interrupt enable rt base t level 開啟全域性中斷 注意中斷巢狀的使用 當乙個彙編函式在c語言檔案中呼叫的時候,如果有乙個形參,則執行的時候會將這個形參傳入cpu暫存器r0,如果有兩個形參,第二個則傳入到r1。rt hw interrupt ena...