荷蘭國旗問題

2021-07-04 10:47:53 字數 1052 閱讀 9818

/**

* 荷蘭國旗問題

* 解題的基本策略:變了兩個顏色區域,如果顏色條不屬於所在的區域,則交換乙個屬於該

* 區域的顏色條。每一次都是必要的交換,從而實現最小交換次數。

*/#include using namespace std;

const int n = 100;

int flag[n]; // 國旗顏色條陣列

int pre[n]; // 記錄該紅條的前紅條位置

int split1; // 區域分隔1

int split2; // 區域分隔2

int blue_red; // 紅條在藍色區域的標記

int white_red; // 紅條在白色區域的標記

int counts = 0;

// print

void out()

cout << endl;

}void swap(int& x, int& y)

void work() else

} }int b = n - 1; // 白、藍區域

for(int i = split1; i < split2; i++)

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

b--;

} }}// initialize

void init() else if(1 == flag[i])

} // 將國旗分成三個顏色區域

// 0~split1-1(red), split1~split2-1(white), split2~n-1(blue)

split1 = red_num;

split2 = red_num + white_num;

blue_red = prei;

int i = split2 - 1;

while(0 != flag[i])

white_red = i;

}int main()

**左飛《cpp資料結構原理與經典問題求解》

荷蘭國旗問題

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

荷蘭國旗問題

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

荷蘭國旗問題

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