荷蘭國旗問題

2022-04-02 10:47:56 字數 1018 閱讀 5554

荷蘭國旗有三橫條塊構成,自上到下的三條顏色依次為紅,白,藍。現有若干由紅,白,藍三種顏色的條塊序列,要將它們重新排列使所有相同顏色的條塊在一起。本問題要求將所有紅色的條塊放在最左邊,所有白色的條塊放在中間,所有藍色的條塊放在最右邊。

//條塊顏色依次存放在l[0,1,2........n-1]中演算法利用快速排序思想,將整個序列按紅,白,藍排序。

思想:設定三個整數r,w,b,其中r指向紅色條塊區域的下乙個單元,w指向白色區域的下乙個單元,b指向藍色條塊區的下乙個單元。

開始時,令r和w為0,b為n-1,w相當於快速排序的low指標,b相當於快速排序的的hight指標。

最終l[0....r-1]存放紅色條塊,l[r....w-1]存放白色區域,l[w....n-1]存放藍色條塊區域。

檢查l[w]有一些三種情況:

(1)如果l[w]=2它已經在白色區域,w直接加1.

(2)如果l[w]=3則將它加到藍色區域頭部,即l[w]與l[b]交換,且b減1.

(3)如果l[w]=1,此時先將白色區域的第乙個元素(即紅色區域的下乙個單元)移動到白色區域末尾,再將它加到紅色區域的下乙個

單元.即l[w]與l[r]交換,且r和w同時加1.

重複上述操作直到w>b為止。

#define local#include

#include

#include

using

namespace

std;

typedef

intelemtype;

const

int maxsize=45

;void sort(int l,int

n)else

if(x==2

)else

}}void output(int l,int

n) cout

<}int

main()

sort(l,maxsize);

output(l,maxsize);

return0;

}

荷蘭國旗問題

上方的便是乙個荷蘭國旗,從圖中我們可以很清楚的看出它的特點,它有三個區域組成,即紅,白,藍。好,現在我們的問題出來了。現在我們面前有一張桌子,桌子上整齊的擺放著紅色,白色,藍色三種線條,但他們的順序是凌亂的。我們的要求是 用乙個演算法把這些線條挑出來重新擺放順序,最後的結果就像上圖的荷蘭國旗,紅色在...

荷蘭國旗問題

問題 荷蘭國旗是由紅白藍三種顏色組成,現假設很多這三種顏色的線被打亂放置,要求從頭掃瞄一遍,3種顏色自然分開,顏色順序是紅,白,藍。問題分析 1 編碼 題目中有三種顏色,可以用0 紅,1 白,2 藍進行編碼。3 演算法 a 把n個0,1,2三種元素隨機放入陣列模擬很多這三種顏色的線被打亂放置的場景 ...

荷蘭國旗問題

荷蘭的國旗由紅色 白色和藍色3種顏色組成。現在假設有很多這3種顏色的線被存放在乙個陣列裡,要求每次操作僅能進行一次交換,在原陣列的基礎上操作。待對陣列進行一遍掃瞄後,3種顏色自然分開,顏色順序為紅 白 藍。另外,要求在o n 的複雜度下,是移動次數最少。荷蘭國旗問題 include include ...