Python筆記08 桌球隊賽程安排 回溯法

2021-08-29 20:14:04 字數 1059 閱讀 5891

題目是 兩個桌球隊進行比賽,各出三人。甲隊為a,b,c三人,乙隊為x,y,z三人。已抽籤決定比賽名單。有人向隊員打聽比賽的名單。a說他不和x比,c說他不和x,z比。請程式設計序找出三隊賽手的名單

這裡我用的是回溯法,**如下:

def get_count(x):

return len(rul[x])

group1 = ['a','b','c']

group2 = ['x','y','z']

# 這個地方後期可以封裝起來用for迴圈建立,然後在刪除元素

rul =

# 這裡可以用深拷貝來做

choice =

# 記錄已做選擇的隊員

seen_members =

# 記錄被選擇的對手

seen_opps =

# 存放結果

res = {}

times = 0

group1.sort(key=get_count)#讓選擇少的排在前面

while group1:

# 第乙個隊員出佇列

member = group1.pop(0)

# 列出可選對手

opps = choice[member]

# 遍歷對手

for opp in opps:

times +=1

if opp not in seen_opps:

# 各種記錄

res[member] = opp#記錄選擇

choice[member].remove(opp)#減少隊員的乙個選擇

break

else:#如果該選手沒做選擇,說明上個選手選錯了

re_member = seen_members.pop()#取出上乙個選手

group1.insert(0,re_member)#讓上乙個重選

choice[member] = rul[member]#選擇初始化

seen_opps.pop()#踢出上乙個選手選擇的對手

print(res)

print(times)

Python學習筆記08

nudge 1 wink 2 a,b nudge,wink a,b 1,2 c,d nudge,wink c,d 1,2 nudge 1 wink 2 a,b,c 1,2,3 a,c 1,3 a,b,c abc a,c a c 高階序列賦值語句模式 string spam a,b,c,d strin...

python 學習筆記(08)

列表方法 append 在列表末尾追加乙個新的物件 例 a 1,2,3,5,8,9,6,5,4 append 10 a 1,2,3,5,8,9,6,5,4,10 count 統計某個元素在列表 現的次數 例 ss 1,2,3,5,8,9,6,5,4 ss.count 5 2 ss.count 4 1...

python筆記29 佇列Queue

python的queue模組提供一種適用於多執行緒程式設計的fifo實現。它可用於在生產者 producer 和消費者 consumer 之間執行緒安全 thread safe 地傳遞訊息或其它資料,因此多個執行緒可以共用同乙個queue例項。queue的大小 元素的個數 可用來限制記憶體的使用。p...