演算法分析期末大作業 回溯演算法 圓排列問題

2021-10-06 16:11:28 字數 450 閱讀 5156

第乙個圓的圓心橫座標為0

定義x(k)陣列算出排列第k個圓的圓心橫座標

minlen為最短的矩形的長度if(centerx+r[t]+r[1]求圓心橫座標:

double center(int t)

}return temp;

//排列第乙個的圓的圓心橫座標是0

}回溯演算法:

void backtrack(int t)

else

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

}求矩陣的最短長度:

void compute()

if (x[i] + r[i] > high)

}if (high - low < minlen) }}

backtrack函式需要o(n!)的時間複雜度,計算當前圓排列長度需要從頭遍歷到尾,需要o(n)計算時間,從而整個演算法的時間複雜度為o((n+1)!)

《演算法分析與設計》大作業 圓排列問題(回溯法)

目錄 知識點1.問題 2.解析 3.設計 4.分析 5.原始碼 1.回溯法摘自 中琦2513 的原創文章 1 概念 回溯演算法實際上乙個類似列舉的搜尋嘗試過程,主要是在搜尋嘗試過程中尋找問題的解,當發現已不滿足求解條件時,就 回溯 返回,嘗試別的路徑。回溯法是一種選優搜尋法,按選優條件向前搜尋,以達...

演算法大作業 圓排列問題

圓排列問題 給定n個圓的半徑序列,將它們放到矩形框中,各圓與矩形底邊相切,求具有最小排列長度的圓排列。首先舉乙個例子,當給定的圓半徑為1,1,3時則可以給出如下排列使排列長度最小 所以這題也算是乙個排列問題,如何排列能夠使排列的長度最小。在排列時有以下幾種情況 1 每個圓相繼相切 如上面的例子裡每個...

演算法大作業 圓排列問題

給定n個大小不等的圓c1,c2,cn,現要將這n個圓排進乙個矩形框中,且要求各圓與矩形框的底邊相切。圓排列問題要求從n個圓的所有排列中找出有最小長度的圓排列。例如,當n 3,且所給的3個圓的半徑分別為1,1,2時,這3個圓的最小長度的圓排列如圖所示。其最小長度為。圓排列問題的解空間是一棵排列樹,按照...