10. 博弈樹 (15分)
阿新 • • 發佈:2018-12-18
成績 | 15 | 開啟時間 | 2018年10月22日 星期一 18:00 |
折扣 | 0.8 | 折扣時間 | 2018年11月22日 星期四 23:55 |
允許遲交 | 否 | 關閉時間 | 2018年12月1日 星期六 23:55 |
下棋屬於一種博弈遊戲,博弈過程可以用樹(博弈樹)來表示。假設遊戲由兩個人( A 和 B )玩,開始由某個人從根結點開始走,兩個人輪流走棋,每次只能走一步, 下一步棋只能選擇當前結點的孩子結點,誰先走到葉子結點為勝。例如,對於下圖所示的博弈樹,若 A 先走,可以選 f , B 若選 h ,則 A 選 j 勝。
編寫一程式,讓計算機和人下棋。當計算機走下一步時,可以根據以下情況決定下一步:
(1) 若存在可以確保取勝的一個孩子結點,則選擇該結點作為下一步;
(2) 若存在多個可以確保取勝的孩子結點,則選擇其中高度最小的結點作為下一步(若有多個選擇,則選最左邊的結點);
(3) 若不存在可以確保取勝的一個孩子結點,則選擇高度最大的孩子結點作為下一步(若有多個選擇,則選最左邊的結點);
例: (下面的黑體為輸入)
(a,(b,(x)),(c,(d),(e,(g),(h)),(f)))
a
b
x
c
d
e
g
h
f
Who play first(0: computer; 1: player )?
1
player:
c
computer: d
Sorry, you lost.
Continue(y/n)?
y
Who play first(0: computer; 1: player )?
1
player:
x
illegal move.
player:
b
computer: x
Sorry, you lost.
Continue(y/n)?
y
Who play first(0: computer; 1: player )?
0
computer: c
player:
f
Congratulate, you win.
Continue(y/n)?
n