荷蘭國旗問題

2021-06-13 03:26:03 字數 959 閱讀 3014

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

//荷蘭國旗問題

#include

#include

using namespace std;

const int n = 100;

int flag[n];//存放顏色陣列

int pre[n];//記錄紅色位置陣列

int split1; //紅色和白色的分割點

int split2;//白色和藍色的分割點

int red_blue; //紅色在藍色區域的部分

int red_white;//紅色在白色區域的部分

int counts = 0;//記錄交換次數

void print();//輸出

void swap(int & x,int & y);//交換

void fun();//實現

void init();//初始化

int main()

void fun()

else}}

int b = n - 1;

for (int j = split1; j < split2; j++)//排序白色和藍色

swap(flag[j],flag[b]);

b--;}}

}void init()

else if (flag[i] == 1)

}split1 = red_num;

split2 = red_num + white_num;

red_blue = prei;

int j = split2 - 1;

while(flag[j] != 0)

red_white = j;

}

荷蘭國旗問題

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

荷蘭國旗問題

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

荷蘭國旗問題

剛才在嚴蔚敏的資料結構習題上看到的這個題。看了幾篇部落格。貌似都沒有結合資料結構的意思來解釋。讓我有種衝動寫篇文章。就把這當作我的第一篇博文吧。問題描述 荷蘭國旗問題 設有乙個僅有紅白藍三種顏色的條塊組成的條塊序列。請編寫乙個時間複雜度為o n 的演算法,使得這些條塊按紅 白 藍的順序排好,即排成荷...