基礎演算法之三色旗 python

2021-10-06 17:32:46 字數 1158 閱讀 1939

問題:

假設有一條繩子,上面有紅,白,藍三種顏色的旗子,起初繩子上的旗子顏色並沒有順序,您希望將之分類,並排列為藍,白,紅的順序,要如何移動次數才會最少,注意您只能在繩子上進行這份動作,而且一次只能調換兩個色旗子。

方法:

一開始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 從前向後設定紅旗的最後位置,如果該位置不是紅旗,向後掃瞄旗子佇列,如...