圓排列問題

2021-05-04 22:29:21 字數 640 閱讀 4805

ø

給定n個大小不等的圓

c1,c2,…,

cn,現要將這

n個圓排進乙個矩形框中,且要求各圓與矩形框的底邊相切。圓排列問題要求從

n個圓的所有排列中找出有最小長度的圓排列。

ø例如,當

n=3,且所給的

3個圓的半徑分別為1,

1,2時,這

3個圓的最小長度的圓排列如圖所示。其最小長度為

2+4√2

。void circle::backtrack(

intt)

swap(r[t], r[j]);}

}float circle::center(

intt)

return temp;

}void circle::compute(void)

if (high-low}

ø上述演算法尚有許多改進的餘地。例如,象

1,2,…,n-1,n

和n,n-1, …,2,1

這種互為映象的排列具有相同的圓排列長度,只計算乙個就夠了,可減少約一半的計算量。

ø另一方面,如果所給的

n個圓中有

k個圓有相同的半徑,則這

k個圓產生的

k! 個完全相同的圓排列,只計算乙個就夠了。

圓排列問題

給定n個大小不等的圓c1,c2,cn,現要將這n個圓排進乙個矩形框中,且要求各圓與矩形框的底邊相切。圓排列問題要求從n個圓的所有排列中找出有最小長度的圓排列。例如,當n 3,且所給的3個圓的半徑分別為1,1,2時,這3個圓的最小長度的圓排列如圖所示。其最小長度為2 4 2。上述演算法尚有許多改進的餘...

圓排列問題

圓排列問題 給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的圓排列。圓的擺放位置不同 先後順序不同 得到的結果可能不同,所以這是乙個排列問題,在回溯裡面需要新增全排列的 要得到圓排列的長度,我們需要知道最右邊圓心的橫座標,它的半徑 第乙個圓的半徑 根據演算法的約定,...

圓排列問題

問題 給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的圓排列。解析該問題是乙個排列問題,問題的解儲存在序列r 中,問題的解空間樹是一顆排列樹。用x 表示當前排列的各個圓的圓心。下界函式 用center t 計算新增圓的圓心,每次新增乙個圓則排列的序列會增長,比較ce...