三色旗問題

2021-06-04 19:14:39 字數 618 閱讀 5216

/*

三色旗問題:

假設有乙個陣列,它有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則繼續前進,...

三色旗演算法

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