首页 > 其他 > 详细

博弈论之威佐夫博弈

时间:2016-08-20 11:40:48      阅读:197      评论:0      收藏:0      [点我收藏+]

威佐夫博弈(Wythoff Game):

  有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后两堆物品都取完者得胜。

结论 :

  设两堆物品初值为 (x,y) 且 x>y ;

  令 z = floor((sqrt(5.0)  + 1) / 2.0) * (x - y);

 

  若 w == y,则后手必胜 , 否则先手必胜;

 

参考了(威佐夫博弈详解)http://blog.csdn.net/y990041769/article/details/21694007

 

code :  

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cmath>
 4 //define swap(x,y) x ^= y , y ^= x , x ^= y;
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int x , y , z;
10     while(~scanf("%d%d",&x,&y))
11     {
12         if(x < y)  
13             swap(x,y) ;
14         z = floor((sqrt(5.0) + 1) / 2.0)*(x - y));
15         if(z == y) 
16             printf("后手必胜\n");
17         else 
18             printf("先手必胜\n");
19     }
20 return 0;
21 }    

 

博弈论之威佐夫博弈

原文:http://www.cnblogs.com/x-1204729564/p/5789809.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!