有向图博弈。给定一个有向图,一个起点,起点上有一个棋子,两个玩家轮流推动棋子,谁不能推了谁就输了。希望知道某个点为起始是必胜还是必败。
注:这两个人都十分聪明,可以看透未来(?)。
一点分析:
1.显然这要是个DAG,不然游戏就不能结束了。。(废话) 而且两个人要在同一张图上操作,轮流进行。。(即所谓的公平游戏)
2.这两个人都很聪明是什么意思呢。。就是说对这两个人而言,这个游戏相当于是给每个点标上属性必胜/必败,然后把整幅图放在他们面前,为了获胜,他们只要无脑走必胜状态就可以了。
2.1如果走到某个点,后继有一个先手必败,这个点就必胜。发现对手的破绽啦,果断往那里冲
2.2如果走到某个点,没有后继或者后继全都是先手必胜,这个点就是必败。敌军太强了,我已走投无路
2.3A的必胜就是B的必败。
3.上面的描述看起来很有道理,然而实际并没有什么用。我们希望把必胜必败转到函数里面,这样就可以套到各种情况里了。
来看一看这个函数的要求。
3.1设函数值的全集为U,先手必胜状态的函数值集合为S1,先手必败状态的函数值集合为S2,则S1|S2=U,S1&S2={};
3.2设当前函数值为y。当后继有至少一个属于S2时,y属于S1;否则y属于S2。
引入mex函数,U为自然数集合,S2={0},完美地满足了条件。
3.3mex的特殊性质:如果SG(x)=y,则一定存在SG(x的后继)=0~y-1。
3.1和3.2是解决单个游戏的关键,3.3是组合多个游戏的关键。
看起来问题解决了?当然没有了。
如果起点和棋子有多个怎么办?
1.如果一个起点有多枚棋子,可以拆分成多个起点,又回到了每个起点一枚棋子的情况。
2.每个起点一枚棋子,有多个起点。每个起点的SG都可以算好了,然后异或起来,=0就是必败,否则必胜。
(异或消掉了相同的部分,而由于3.3,相同的部分也确实是可以通过你走一步我走一步来抵消的)
于是,一个大游戏可以被拆分成若干简单的小游戏。
很经典的NIM游戏,放到这里是适用的。
这样的游戏看起来十分优美,原因在于游戏的结局只有必胜和必败两种情况,可以说是固定的,通过预知所有转移就可以计算。
orz看穿未来却要面对面玩一场注定了结局的游戏的无聊先知A和B
orz人类的神奇娱乐