趣味演算法 三色旗

2021-06-05 00:13:08 字數 1030 閱讀 1429

趣味演算法-三色旗

一條繩子掛紅白藍三種顏色的旗子,且排列無序,現用程式把三種旗子同色歸類,順序為紅-白-藍,每次只能交換2面旗子,採用最少步驟完成。

演算法描述:只需把紅色和藍色的旗子進行交換,紅旗和籃旗都就位後,白旗自然就位。

1) 從前向後設定紅旗的最後位置,如果該位置不是紅旗,向後掃瞄旗子佇列,如果發現紅旗則與當前紅旗位置的旗子交換。

2) 如果該位置是紅旗,則向後移動紅旗的最後位置。

3) 從後向前設定籃球的最前位置,如果該位置不是藍旗,向前掃瞄旗子佇列,如果發現藍旗則與當前紅旗位置的旗子交換。

4) 如果該位置是藍旗,則向前移動藍旗的最後位置。

#include // the correct order should be blue, white, red

int makeorder(char arrflagqueue, int nlen)

else

printf("\n\n");

break;}}

}else

if (arrflagqueue[nsetbpos] != 'b')

else

printf("\n\n");

break;}}

}else

}return 0;

}int main()

; char arrtest2[2] = ;

for(n = 0; n < 10; n++)

printf("\n\n");

makeorder(arrtest1, 10);

printf("********************===\n\n");

for(n = 0; n < 2; n++)

printf("\n\n");

makeorder(arrtest2, 2);

scanf("%d", &n);

return 0;

}

演算法複雜度:

最差:佇列中全為白旗

o(n)  = n * n * n

三色旗演算法

演算法描述 假設有一條繩子,上面有紅 白 藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍 白 紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這個動作,而且一次只能調換兩個旗子。示意圖 解法 在一條繩子上移動,在程式中也就意味只能使用乙個陣列,而不使用其它的陣列...

三色旗演算法

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

三色旗問題

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