三色旗演算法

2021-08-27 00:17:31 字數 985 閱讀 8261

演算法描述:

假設有一條繩子,上面有紅、白、藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍、白、紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這個動作,而且一次只能調換兩個旗子。示意圖:

解法:

在一條繩子上移動,在程式中也就意味只能使用乙個陣列,而不使用其它的陣列來作輔助,問題的解法很簡單,您可以自己想像一下在移動旗子,從繩子開頭進行,遇到藍色往前移,遇到白色留在中間,遇到紅色往後移。

演算法的思想主要是:為了將所有的旗子按照藍白紅排列。

(1)設定b和w的指標放在開始,將r指標放在末尾

(2)移動w指標,遇到藍,則與b指標所指調換順序,w和b各加1;遇到白,則w+1;遇到紅,則與r調換,並且r=r-1

(3)當指標w和r相遇時,結束演算法

執行結果示例

; //初始化color陣列

//陣列長度為10,'\0'不算長度

int wflag=0;//記錄白旗顏色兼指標

int bflag=0;//記錄藍旗顏色兼指標

int rflag=strlen(color)-1;//記錄紅旗顏色兼指標

int i;

for(i=0;i

三色旗演算法

參考 三色旗的問題最早由e.w.dijkstra所提出,他所使用的用語為dutch nation flag dijkstra為荷蘭人 假設有一條繩子,上面有紅 白 藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍 白 紅的順序,要如何移動次數才會最少,注意您只能在繩子上進...

趣味演算法 三色旗

趣味演算法 三色旗 一條繩子掛紅白藍三種顏色的旗子,且排列無序,現用程式把三種旗子同色歸類,順序為紅 白 藍,每次只能交換2面旗子,採用最少步驟完成。演算法描述 只需把紅色和藍色的旗子進行交換,紅旗和籃旗都就位後,白旗自然就位。1 從前向後設定紅旗的最後位置,如果該位置不是紅旗,向後掃瞄旗子佇列,如...

三色旗問題

三色旗問題 假設有乙個陣列,它有n個元素,每乙個不外乎是紅,白,藍3種顏色之一的代號,就用r,w,b代表。這些元素在陣列中並沒有依同樣顏色的元素排在一起的方式來排列,請寫乙個程式把這些元素排成所有藍色在前,接著是白色,最後是紅色的排列方式,不過在寫程式時要滿足下面的條件 1 不能用額外的記憶體,換句...