1. 程式人生 > >10. 博弈樹 (15分)

10. 博弈樹 (15分)

成績 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 勝。

tree

編寫一程式,讓計算機和人下棋。當計算機走下一步時,可以根據以下情況決定下一步:

(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