題目是 兩個桌球隊進行比賽,各出三人。甲隊為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...