給定乙個dag,起點1出有乙個棋子,先手後手依次將他向出邊移動,最先無法移動的人輸,求先手是否必勝。
//因為只要能轉移到任意的對手的必敗態,便為必勝態,反之為必敗態,故只會有必勝/必敗態存在。
#include
#include
#include
#include
#include
#define maxn 10010
#define maxm 10010
using
namespace
std;
struct edge edge[maxm];
bool win[maxn];
int n, m;
int out_edge[maxn];
int topo_queue[maxn], q_end = 0, q_begin = 0;
edge *v[maxn];
int main() //鄰接表儲存,同時記錄出度。
for(int i = 1; i <= n; i++)
if(!out_edge[i]) topo_queue[q_end++] = i;//將所有出度為0的點加入處理佇列中
for(int i = 0; i < q_end; i++)
win[i] = false; //所有點初始為先手無法必勝,因先手到達無法走的點即敗
while(q_begin < q_end)
} //toposort刪邊過程
} //toposort過程
if(win[1]) cout
<< "win";
else
cout
<< "lose";
return
0;}
ps:最近**風格變化的略快略多啊。。。 博弈論 Nim博弈
1.nim博弈的起源很早,至於歷史我們就不再說了,直接說它的使用場景。1 依舊是兩個人博弈,但是物品時n堆,每一堆有ai個。2 每個人可以挑選一堆取走若干個,但是不能不取。3 最先取完所有物品的人獲勝。4 結論 所以堆的物品的數量異或起來是0,先手必敗。2.乙個nim博弈的例項 nim博弈。乍一看這...
Nim博弈(博弈論)
1.題目 給定n堆石子,兩位玩家輪流操作,每次操作可以從任意一堆石子中拿走任意數量的石子 可以拿完,但不能不拿 最後無法進行操作的人視為失敗。問如果兩人都採用最優策略,先手是否必勝。思路 必勝狀態 a1 a2 an 0 可以走到某乙個必敗狀態 必敗狀態 a1 a2 an 0 走不到任何乙個必敗狀態 ...
初探博弈論
最近看的書都是計算機方面的,看多了難免單調。於是就和朋友一起跑到書店,想買一本書來中和一下生活中的0和1。一番挑選後,我拿著一本書到了收銀台,朋友看了說 不會吧,你怎麼又買計算機的書啊?我晃了晃手中的那本 新編博弈論平話 對朋友說 這可是放之四海皆準的真理哦,你看那邊經濟類的書架。朋友順著我指的方向...