/*
三色旗問題:
假設有乙個陣列,它有n個元素,每乙個不外乎是紅,白,藍3種顏色之一的代號,就用r,w,b代表。這些元素在陣列中並沒有依同樣顏色的元素排在一起的方式來排列,請寫乙個程式把這些元素排成所有藍色在前,接著是白色,最後是紅色的排列方式,不過在寫程式時要滿足下面的條件:
(1)不能用額外的記憶體,換句話說,只能在陣列之內用互換的方式完成。
(2)互換兩個元素的動作要越少越好。
(3)對於每乙個元素而言,測試它是紅,是白,還是藍的工作每種顏色最多只能做一次測試。
在這個條件下,請寫乙個最快的程式。 */
#include "stdio.h"
#include "time.h"
#define n 100
#define blue 1
#define white 2
#define red 3
#define swap(x,y)
void swap(int *a,int *b)
void main()
printf("\n");
//排序
while (wflag <= rflag)
else
else
三色旗問題
假設有一根繩子,上面有一些紅 白 藍色的旗子。起初旗子的順序是任意的,現在要求用最少的次數移動這些旗子,使得它們按照藍 白 紅的順序排列。注意只能在繩子上操作,並且一次只能調換兩個旗子。分析 其實要移動旗子得到要求的結果很簡單,但是需要注意的是需要移動最少的次數這個限制條件。網上的一種解法 從繩子開...
Algorithm Gossip 三色旗問題
問題 假設有一條繩子,上面有紅白藍三種顏色的旗子,開始時旗子的顏色並沒有順序,現將其分類,排成藍白紅的順序,每次只能調換兩個旗子,問怎樣移動次數最少?演算法分析 排列順序是b w r,定義三個指標 1 b永遠指向第乙個不是b的元素 2 w是遍歷的指標,向前移動,並判斷指向元素,如果指向w則繼續前進,...
三色旗演算法
演算法描述 假設有一條繩子,上面有紅 白 藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍 白 紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這個動作,而且一次只能調換兩個旗子。示意圖 解法 在一條繩子上移動,在程式中也就意味只能使用乙個陣列,而不使用其它的陣列...