黑白棋子问题

2023-11-10

黑白棋子问题

1、问题描述

两个人下棋,一方执黑棋,一方执白棋。要求双方轮流下子。

给出两种情况的解决办法:
(1)执黑子一方先下。(2)双方都可以先下,谁先抢到棋盘谁先下。

2、解决

情况(1)

信号量:bfg=1,wfg=0

//注意信号量及初值的设置,保证黑方先下子且之后双方轮流下子。

seamphore bfg=1,wfg=0;
void main()
{
   black();
   white();
}
 
void black()
{
  while(true)
 {
    wait(bfg);//
    if whereput()
    {put a black qizi;}//下一黑棋
    else break;
    signal(wfg);//
 }
}
 
void white()
{
  while(true)
 {
    wait(wfg);//
    if whereput()
    {put a white qizi;}//下一白棋
    else break;
    signal(bfg);//
 }
}

情况(2)

争抢棋盘需要一个互斥信号m;加入if控制与标志判断。利用互斥信号量与特殊标志变量的结合使用实现有序控制。

下面给出两种实现方案。

方案一

在这里插入图片描述

方案二

在这里插入图片描述

seamphore bfg=1,wfg=0,m=1;
boolean fg=F;
void main()
{
     black();
      write();
}
void black()
{
      wait(m);
      if(!fg)
     {
         bfg=1;wfg=0;fg=T;
     }
     signal(m);
     while(true){
        wait(bfg);
       if whereput()
        {
           put a black qizi;
           signal(wfg);
        }else
         {
            signal(wfg);
            break;
         }
}
void white()
{
       wait(m);
       if(!fg)
       {
           bfg=0;wfg=1;
           fg=T;
        }
       signal(m);
       while(true){
            wait(wfg);
            put a white qizi;
             signal(bfg);
      }
}

来源1
来源2

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

黑白棋子问题 的相关文章

随机推荐

  • maven手动引入仓库文件操作

    捕获 jpg 一 idea打开maven命令窗口 在框里输入命令 mvn install install file DgroupId com elink web DartifactId jcifs Dversion 1 3 15 SNAPS
  • 【2021年全国大学生数学建模竞赛题】“生产企业原材料的订购与运输”详细解析(内附MATLAB代码)

    2021年全国大学生数学建模竞赛题 生产企业原材料的订购与运输 详细解析 内附MATLAB代码 文章目录 1 模型建立 1 1确定被评判对象的对象集及因素集 1 2确定各评价指标权重 1 3建立相对模糊及对因素的偏差加权平均 1 4根据Fj
  • Android APK安装完成自动删除安装包

    需要实现此功能 一般实际开发是在自动版本更新上 当更新完开始自动安装完毕后 删除内存卡里的安装包 实现方式很简单 监听应用广播 获取内存卡下的文件 删除 1 监听广播 java view plain copy package com exa
  • 数据库系统原理课程总结8——备份与日志初步、并发模拟实验

    一 备份与日志初步实验 1 了解你所使用的数据库平台的单表数据备份和整库备份方法 进行相应备份操作 并尝试利用备份数据在另一个机器上恢复数据 并在实验报告中描述上述过程 答 首先 在MySQL中使用mysqldump将数据库的单表数据以sq
  • Hutool(Excel工具使用)

    Hutool Excel工具使用 官方文档Hutool 目录 基本依赖的导入 Writer方法的使用 1 1 写出List数据 1 2 写出Map数据 1 3 写出我们的Bean对象 1 4 自定义Bean的key别名 1 5 写出到IO流
  • LeetCode-116.填充每个节点的下一个右侧节点指针、深度优先搜索

    题目分析 广度优先搜索 题目要求把二叉树中每一层的的节点连起来 最简单的方法即 BFS 按层的顺序的对树进行遍历 但需要使用 queue 数据结构 空间复杂度为 O N 不符合题目要求 深度优先搜索 由于 next 指针的存在 可以实现对二
  • Unity WorldToScreenPoint坐标变换

    功能 实现标签跟随物体运动 标签是一个Prefab 由底图和文字组成 Dota2中英雄血条的实现也是这种原理 说到底就是标签根据物体位置不间断刷新自己的坐标值 3D gt 2D gt 3D 先来了解一下Unity D中的坐标系统 1 Wor
  • 前台页面上传data image图片,java后台接收图片保存

    最近在项目中有这么一个需求 就是上传一个视频文件 然后要获取视频文件的第一帧图片 这个可以通过canvas获取得到 得到的是一个dataURL 之后还要将这个图片上传到云 这个时候如何操作就不清楚了 于是乎 google一番 总结如下 将d
  • Redis源码分析(三)—— 字典的设计与实现

    前言 字典是一种用于保存键值对的数据结构 Redis数据库使用字典做为底层实现 字典也是哈希键的底层实现之一 C语言中并没有内置字典这个数据结构 Redis自己实现了字典 以下结合源码分析Redis字典的设计与实现 源码版本 Redis 6
  • java执行linux命令:head -n 80 /dev/urandom

    看了微信小程序api后 发现登录Logo接口需要处理随机key 所以着手处理了一下 直接贴代码 先运行命令 让其生成168位随机数 private static String wxSessionkey F3UENUg3JcI31O2RpoB
  • weex实现带有跟手动画的tab栏

    在weex开发的群中看到有人提到这个问题 就想着去实现以下 还不是很完美 只支持一屏的tab栏内容 后续会进行优化 2019 6 20 更新 已支持滚动跟手 可以超出屏幕 2019 6 23 更新 解决子元素包含滚动标签时无法滑动切换的问题
  • Poppuwindow的简单使用

    继 DialogFragment的简单使用 之后 我们再来试试 Poppuwindow 的简单使用 切记 本篇博客只能保证你入门哦 适合小白学习 效果展示 1 几个常用的构造方法 public PopupWindow Context con
  • 什么是压力测试?如何进行Jmeter压力测试

    一 什么是压力测试 软件测试中 压力测试 Stress Test 也称为强度测试 负载测试 压力测试是模拟实际应用的软硬件环境及用户使用过程的系统负荷 长时间或超大负荷地运行测试软件 来测试被测系统的性能 可靠性 稳定性等 常用的压力测试软
  • 因果学习论文阅读

    论文阅读 因果机器学习的前沿进展综述 Overview of the Frontier Progress of Causal Machine Learning 因果概念 提出因果旨在解决虚假相关的问题 相关只需要保持两个变量的分布相同 而因
  • python中的CSV 工具类

    CSV工具类是Python中的自带包 用来解析CSV文件 实例化一个CSV对象 需要传入一个CSV文件的路径 with open case csv as casefile csv DictReader 将CSV读取成字典的形式 rows2
  • Python练习(二)

    目录 列表元素计算 字典最大值 输出一串字符对应的Unicode值 列表基本操作 元素增加 删除 字典值求和 习题 列表元素计算 描述 从键盘输入一个列表 计算输出列表元素的平均值 请完善代码 def mean numlist s 0 0
  • opencv+matlab双目标定(python版)

    采集的图像用opencv自带程序识别不出棋盘格角点 可能是因为分辨率太低了 好在MATLAB标定工具箱可以正常使用 不过获得的标定参数导入opencv之后需要转置 记录一下官方自带实例的方法免得以后忘了 1 MATLAB标定 导入左右相机图
  • 【uniapp关联unicloud,阿里云云服务空间】unicloud本地调试服务启动失败:当前项目未关联unicloud服务空间,请调整后重新运行,已解决

    最近开发app项目 很多都是第一次上手 1 在Hbuider中运行项目 出现如下提示 2 项目根目录下已有uniCloud文件夹 3 如果云开发环境未创建 可以右击项目 选择创建uniCloud云开发环境 4 创建好的目录如下 index
  • DES 数据加密标准 结构详解

    DES Data Encryption Standard 又称数据加密标准 是一种对称加密算法 也是密码学摆脱古典流加密后最简单的一种块加密算法 由于香农与1949年提出 完善保密性 该标准要求密钥长度不短于明文长度 实际操作难以达到 因此
  • 黑白棋子问题

    黑白棋子问题 1 问题描述 两个人下棋 一方执黑棋 一方执白棋 要求双方轮流下子 给出两种情况的解决办法 1 执黑子一方先下 2 双方都可以先下 谁先抢到棋盘谁先下 2 解决 情况 1 信号量 bfg 1 wfg 0 注意信号量及初值的设置