博弈論初探 DAG上的NIM

2021-07-15 03:14:54 字數 960 閱讀 7342

給定乙個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。一番挑選後,我拿著一本書到了收銀台,朋友看了說 不會吧,你怎麼又買計算機的書啊?我晃了晃手中的那本 新編博弈論平話 對朋友說 這可是放之四海皆準的真理哦,你看那邊經濟類的書架。朋友順著我指的方向...