HOHO~~.話說好久沒有長時間地鑽研演算法問題了,這次鑽研了好幾道,寫出來了.感覺非常不錯.而且,網吧旁邊沒有人,想寫什麼就寫什麼,哈哈.
問題描述是這樣的,一塊電路板,上面鑲嵌電氣元件,涉及到分布問題.因為可能出現兩塊元件出現覆蓋的問題,嗯.這就是問題的基本描述,接下來說下去.理所當然地使用區間樹來解決這個問題,先將輸入塊按照X座標排序,從而得到座標的範圍.只檢查這個範圍就好了.接下來,用一條線從左道右掃描這塊地區,如果遇到塊的左邊,則依據該塊的y座標去區間樹中檢查是否出現重疊.這裡需要說明的是,實現中包含了找出所有覆蓋的塊的方法以及僅找出覆蓋的最左面的塊的方法.具體的問題根據具體需要吧.畢竟是一道演算法問題,沒有大肆進行封裝.呵呵.接著說下去.將這塊的y座標插入分區樹中,無論是否出現重疊;如果,是某個塊的右邊,則從區間樹中刪除這個塊,因為它已經不在當前的考察範圍內了.
就這樣,進行下去了.思路很清晰,實現的細節不難.
雖然是C++檔案,我沒有使用多少C++特性.感覺,用C++寫得很舒服.嗯.這一輪的演算法研究之後,就又繼續C++了.如此往複,呵呵.
總是這樣,寫的時候,琢磨著寫出來之後,說說這,說說那.一旦寫完了,不想說太多了.呵呵.
貼出來吧.
// Ata14.3-7.cpp -- 2011-06-03-21.24<br />//2011-06-04-13.25 終於完成了.好久沒幹大活了.<br />#include "stdafx.h"<br />#include "block.h"<br />#include <iostream></p><p>int _tmain(int argc, _TCHAR* argv[])<br />{<br />using block :: Block ;<br />using block :: Test ;<br />Block array[3] = {<br />{3, 5, 2, 5, 1},<br />{1, 3, 1, 5, 2},<br />{2, 5, 5, 7, 3}<br />} ;<br />Test test = Test (array, 3, 1) ;<br />test.CalculateAndOutput () ;</p><p>std :: cin.get () ;</p><p>return 0 ;<br />}</p><p>