博弈树

取球博弈


有一堆小球(总数:10),规则为:两方轮流取球,每次只能取固定数目:1,3,7,8;轮到某一方取球时,若无法执行该规则,则判该方为输的一方。(己方先取)

package bishi;

public class MyGameTheory {// 必胜返回true
	// x为当前剩余球的数目,我方取球,若必赢;返回true;否则返回false.
	public static boolean fun(int x) {

		int[] op = { 1, 3, 7, 8 };// 每次只能取的球数为1,3,7,8
		for (int i = 0; i < op.length; i++) {
			if (x >= op[i]) {// 操作可行,取op[i]个球,剩余x-op[i]
				if (fun(x - op[i]) == false) {// 对方必输,递归
					return true;// 己方必赢
				}
			}
		}
		return false;// 无论如何取球,对方必赢,则己方必输
	}

	// 在剩余x球时,我方先取球的结局如何?
	public static void main(String[] args) {
		// 己方试着取一次,看对方的返回结果,若为false,则己方必赢;否则己方必输。
		System.out.println(fun(10));
	}
}

思路:

局面----走一步----新局面

初始局面---树根

寻找增加获胜概率(对己方有利)的路径

特点:

在博弈树中,越是靠近叶子节点,节点数目越多。会有大量重复运算,可以使用dp记录中间(子问题)结果。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值