# Notice:
所示為GH,GV:L->B、R->T、W->H
若只需gh, gv圖,其實自graph開始便足夠
# 前置:
macro存在於一個vector(macros)中
已知每個block的x, y, w, h(worldbound)
Connection(Net)存在於一個vector(connections)中
已知Connection中的兩個名字
# L, R, B, T
give `connections` = chip.connections (vector\<Connection>)
foreach ( `connect` in `connections` )
 give `bound` = `Macro.worldBound`
 give `(L, B)` = `(bound.x, bound.y)`
 give `(R, T)` = `(bound.xMax, bound.yMax)`
 比較x, Li, Bi = 最小者;若有一樣大的x, 選y較小的
 比較x, Ri, Ti = 最大者;若有一樣大的x, 選y較大的
# sequence pair
(...bi ...bj ...,...bi ...bj ...) ⇒ xi + wi ≤ xj (7)
(...bj ...bi ...,...bi ...bj ...) ⇒ yi + hi ≤ yj (8)
foreach (`connect` in `connections`)
 add to (7)||(8) iif once
# Adjecency list:
1. 用一個for loop 做每一個connection
2. addVertex:s, t, L1, R1…Ln,Rn
n為connections.size
3. 加s->R, L->t
addEdge(s, R1, 0, number_of_2_pin_net)... addEdge(s, Ri, 0, ?)
addEdge(L1 , t, 0, ?)...addEdge(Li, t, 0, ?)
4. 如果不存在,加此輪connection內的兩個macro的vertex,命名為nameX
if not :addVertex:connections[i]->macro1.name+”X”
if not :addVertex:connections[i]->macro2.name+”X”
(vertex的總個數應為n*2-重複用到的macro))
5. 加上兩個macro的connection, cost為當前macro的w/2
(用macro的名字在macros裡面找到w)
addEdge(Ri, connections[i]->macro1.name, macros[index].worldbound.w/2)
addEdge(Ri, connections[i]->macro2.name, macros[index].worldbound.w/2)
addEdge(connections[i]->macro1.name, Li, macros[index].worldbound.w/2)
addEdge(connections[i]->macro1.name, Li, macros[index].worldbound.w/2)
# UNSOLVED problems:
1. capacity:論文中存在數值形式的capacity的只有當edge為s-r, l-t時,其餘皆是Unlimited。且不清楚題目是否給予capacity。
2. 於gh, gv圖(論文例子),還存在一x1x2關係,我導不出來所以沒寫進去
3. 用vector, list, linled-list?