趣味演算法-三色旗
一條繩子掛紅白藍三種顏色的旗子,且排列無序,現用程式把三種旗子同色歸類,順序為紅-白-藍,每次只能交換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 不能用額外的記憶體,換句...