問題:
假設有一條繩子,上面有紅,白,藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍,白,紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這份動作,而且一次只能調換兩個色旗子。
方法:
一開始b,w指向0索引,r指向最後乙個索引
1 如果w指向藍色 則交換b和w指向的值,同時,b,w加1
2 如果w指向白色,則w加1
3如果w指向紅色 ,則交換w,r指向的值,同時r-1
python**:
def
colorflag
(color)
: r_flag=
len(color)-1
w_flag=
0 b_flag=
0while
(w_flag<=r_flag)
:if color[w_flag]
=="b"
: color[b_flag]
,color[w_flag]
=color[w_flag]
,color[b_flag]
b_flag+=
1 w_flag+=
1elif color[w_flag]
=="w"
: w_flag+=
1elif color[w_flag]
=="r"
: color[w_flag]
,color[r_flag]
=color[r_flag]
,color[w_flag]
r_flag-=
1print
(color)
if __name__ ==
'__main__'
: color=
['r'
,'r'
,'w'
,'b'
,'w'
,'b'
,'r'
] colorflag(color)
#輸出 ['b', 'b', 'w', 'w', 'r', 'r', 'r']
三色旗演算法
演算法描述 假設有一條繩子,上面有紅 白 藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍 白 紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這個動作,而且一次只能調換兩個旗子。示意圖 解法 在一條繩子上移動,在程式中也就意味只能使用乙個陣列,而不使用其它的陣列...
三色旗演算法
參考 三色旗的問題最早由e.w.dijkstra所提出,他所使用的用語為dutch nation flag dijkstra為荷蘭人 假設有一條繩子,上面有紅 白 藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍 白 紅的順序,要如何移動次數才會最少,注意您只能在繩子上進...
趣味演算法 三色旗
趣味演算法 三色旗 一條繩子掛紅白藍三種顏色的旗子,且排列無序,現用程式把三種旗子同色歸類,順序為紅 白 藍,每次只能交換2面旗子,採用最少步驟完成。演算法描述 只需把紅色和藍色的旗子進行交換,紅旗和籃旗都就位後,白旗自然就位。1 從前向後設定紅旗的最後位置,如果該位置不是紅旗,向後掃瞄旗子佇列,如...