首页 > 其他分享 >博弈论 Nim游戏

博弈论 Nim游戏

时间:2024-09-09 21:38:08浏览次数:9  
标签:石子 游戏 piles Nim 博弈论 玩家 异或 堆中

    本文参考链接:https://www.geeksforgeeks.org/combinatorial-game-theory-set-2-game-nim/

给定许多堆,其中每堆包含一些数量的石头。在每一回合中,玩家只能选择一堆并从该堆中移除任意数量的石子(至少一个)。无法移动的玩家被视为输掉游戏(即,拿走最后一颗石头的玩家获胜

    举个栗子:

    存在三堆石子和两个玩家

    石子:1、4、5

    玩家:A、B

1、比赛胜利因素

    1、最先开始的玩家

    2、堆的初始配置

如果 A玩家 和 B玩家 都发挥最佳(即,他们没有犯任何错误),那么如果游戏开始时的 所有堆中石子的异或和 不为零,那么先开始的玩家就一定会获胜。否则,如果 所有堆中石子的异或和 评估为零,那么玩家 A 肯定会输。

2、最优策略

    1、如果“n”个数字的异或和已经为零,则不可能通过数字的单次减少来使异或和为零。

    2、如果“n”个数字的异或和非零,那么至少有一种方法可以减少一个数字,异或和为零。

即存在两种状态 冷状态热状态

    冷状态:无论当前玩家怎么取剩下的都是热状态。即第一种情况

    热状态:当前玩家可以通过操作使得剩下的状态变为冷状态,即第二种情况

让我们将上述定理应用到上面玩的游戏中。第一局比赛中, A先开始,比赛开始时 所有堆中石子的异或和 为3 XOR 4 XOR 5 = 2,是非零值,因此A获胜。而在第二盘游戏中,当牌堆的初始配置为1、4、5, A先开始时, A注定会输,因为游戏开始时 所有堆中石子的异或和 是1 XOR 4 XOR 5 = 0 。

#include <iostream>
#include <vector>

using namespace std;

// 判断当前玩家是否处于必胜态
bool isWinningPosition(const vector<int>& piles) {
    int nimSum = 0;
    for (int pile : piles) {
        nimSum ^= pile;  // 计算所有堆的异或和
    }
    return nimSum != 0;  // 如果 Nim-Sum 不为 0,则当前为必胜态
}

int main() {
    int n;  // 堆的数量
    cout << "请输入堆的数量:";
    cin >> n;

    vector<int> piles(n);
    cout << "请输入每堆的石子数量:" << endl;
    for (int i = 0; i < n; ++i) {
        cin >> piles[i];
    }

    if (isWinningPosition(piles)) {
        cout << "当前玩家处于必胜态。" << endl;
    } else {
        cout << "当前玩家处于必败态。" << endl;
    }

    return 0;
}

标签:石子,游戏,piles,Nim,博弈论,玩家,异或,堆中
From: https://www.cnblogs.com/lyx9785/p/18405384

相关文章

  • 《星球大战:亡命之徒》游戏启动时崩溃弹窗“缺少kernel32.dll”该怎么解决?星球大战亡命
    当《星球大战:亡命之徒》启动时崩溃弹窗提示“缺少kernel32.dll”,可以尝试重新安装游戏,看是否能恢复该文件。也可从可靠渠道下载kernel32.dll,放置到系统目录下,以解决问题让游戏正常启动。本篇将为大家带来《星球大战:亡命之徒》游戏启动时崩溃弹窗“缺少kernel32.dll”该怎么解决......
  • 《黑神话:悟空》游戏启动时崩溃弹窗“找不到amdvlk64.dll”该怎么办?黑神话悟空游戏闪退
    当《黑神话:悟空》启动时崩溃弹窗提示“找不到amdvlk64.dll”,可以考虑重新安装游戏以找回该文件。也可从可靠来源下载amdvlk64.dll,放置到游戏安装目录下,尝试解决问题让游戏正常启动。本篇将为大家带来《黑神话:悟空》游戏启动时崩溃弹窗“找不到amdvlk64.dll”该怎么办的内容,感兴......
  • 【小项目】python贪吃蛇小游戏设计
    引入pygame库添加pygame库,在cmd中输入以下代码,进行安装。如果输入pipinstallpygame出现以下报错,可以尝试在前面加入python3-m。python3-mpipinstallpygame贪吃蛇代码importpygameimporttimeimportrandom#初始化Pygamepygame.init()#定义颜色white=......
  • 《黑神话》的狂欢,开拓出国产游戏行业的一片蓝海
    《黑神话》的狂欢,开拓出国产游戏行业的一片蓝海自8月20日《黑神话:悟空》发售以来,国内外游戏圈从未停止过对于这款现象级国产3A游戏的讨论,这种讨论的声势愈发浩大,乃至各路与游戏并不相关的主流媒体也纷纷下场站台,为其发出鼓励与支持的声音。相比起前些年,电子游戏在主流媒体......
  • 电脑怎么录屏幕视频带声音?游戏、微课录制必看!
    在数字化时代,无论是游戏爱好者想要分享精彩瞬间,还是教育工作者需要制作微课视频,掌握电脑屏幕录制并同步声音的技能都变得尤为重要。今天,我们就来揭秘几种高效且易用的录屏方法,需要的朋友快快码住!1.嗨格式录屏大师——专业级录制体验获取地址:录屏大师软件免费下载_高清电......
  • ‌游戏被IP限制了怎么办:‌全面解析原因与应对策略
    在数字化娱乐盛行的今天,‌网络游戏已成为许多人生活中不可或缺的一部分。‌然而,‌有时玩家可能会遇到游戏被IP限制的问题,‌这无疑给游戏体验带来了不便。‌本文将深入探讨游戏被IP限制的原因,‌并提供一系列有效的解决方法,‌希望帮助玩家重新获得游戏访问权限,‌畅享无忧的游戏时......
  • 游戏录屏掉帧怎么办?有什么录屏软件推荐吗?
    对于广大游戏爱好者来说,录制游戏精彩瞬间、分享攻略或制作教程已经成为一种常态。然而,在录屏过程中,不少玩家都会遇到掉帧的问题,这不仅影响了视频的流畅度,也大大降低了观看体验。那么,面对游戏录屏掉帧的困扰,我们该如何解决?又有哪些录屏软件值得推荐呢?下面就一起来看看吧。一......
  • 专为游戏行业设计的安全防护盾——游戏盾
    游戏行业可以说是近年来发展最为迅猛的行业之一了,在数字化的浪潮下游戏行业成为互联网娱乐的重要支柱。然而繁荣的行业发展背后隐藏着越来越严峻的网络安全挑战,尤其是DDoS攻击、CC攻击等恶意行为频发。为了应对复杂的网络环境,快快网络推出针对游戏行业打造的高定制网络安全解决......
  • Java魔板游戏软件(含代码)
    ✅作者简介:2022年博客新星第八。热爱国学的Java后端开发者,修心和技术同步精进。......
  • C++小游戏集合3个(不定时更新)1
    前言在Dvec++中想做游戏是很难的,但我不这么想,在下写了一些小游戏给客官看看一,2048#include<iostream>#include<vector>#include<ctime>#include<cstdlib>usingnamespacestd;classGame_2048{public:Game_2048();~Game_2048();voidintroduction()......