下棋属于一种博弈游戏,博弈过程可以用树(博弈树)来表示。
假设游戏由两个人(A和B)玩,开始由某个人从根结点开始走,两个人轮番走棋,每次只能走一步,下一步棋只能选择当前结点的孩子结点,谁先走到叶子结点为胜。
例如,对于下图所示的博弈树,若A先走,可以选f,B若选h,则A选j胜。
编写一程序,让计算机和人下棋。
当计算机走下一步时,可以根据以下情况决定下一步:(1)若存在可以确保取胜的一个孩子结点,则选择该结点作为下一步;
(2)若存在多个可以确保取胜的孩子结点,则选择其中高度最小的结点作为下一步(若有多个选择,则选最左边的结点);
(3)若不存在可以确保取胜的一个孩子结点,则选择高度最大的孩子结点作为下一步(若有多个选择,则选最左边的结点);
例:(下面的黑体为输入)(a,(b,(x)),(c,(d),(e,(g),(h)),(f)))abxcdeghfWhoplayfirst(0:computer;1:player)?1player:ccomputer:dSorry,youlost.Continue(y/n)?yWhoplayfirst(0:computer;1:player)?1player:xillegalmove.player:bcomputer:xSorry,youlost.Continue(y/n)?yWhoplayfirst(0:computer;1:player)?0computer:cplayer:fCongratulate,youwin.Continue(y/n)?n
1