题目:

输入棋盘:1 1 2 3 2 3
                  3 3 2 3 3 3
                  2 2 2 3 3 3
                  1 2 2 2 3 3
                  2 1 1 2 3 1     (其中1代表空,2代表白子,3代表黑子)
输出:白棋活子个数,黑棋活子个数

来源:华为校招实习生笔试题第二题

#include <iostream>
#include <string>
#include <vector>
#include <array>
using namespace std;class Solution{
public:int breathe; // 气int count; //int result[2]; // 结果,活子个数,0白子,1黑子// 函数四:查看棋盘void watch(vector<vector<int>> &arr){for (int i = 0; i < arr.size(); i++){for (int j = 0; j < arr[i].size(); j++){cout << arr[i][j] << "  ";}cout << endl;}}// 函数三:找到arr里面的值为a的数替换为b,并return a的数目int change(vector<vector<int>> &arr, int a, int b){int changeNum = 0;for (int i = 0; i < arr.size(); i++){for (int j = 0; j < arr[i].size(); j++){if (arr[i][j] == a) {arr[i][j] = b;changeNum++;}}}return changeNum;}// 函数一:遍历所有棋子void solve(vector<vector<int>> &arr){breathe = 0;count = 0;result[0] = 0;  // 活白子结果result[1] = 0;for (int i = 0; i < arr.size(); i++){for (int j = 0; j < arr[i].size(); j++){// 遍历到已经处理过的子和空。矩阵0代表遍历过,1代表为无子if (arr[i][j] == 0 || arr[i][j] == 1) continue;// 遍历到白子,找到所有与之相连的子、气if (arr[i][j] == 2){deepFirst(arr, 2, i, j);watch(arr);breathe = change(arr, -1, 1); // 回溯if (breathe >= 2){result[0] += count;}breathe = 0;    // 回溯count = 0;}// 遍历到黑子,找到所有与之相连的子、气if (arr[i][j] == 3){deepFirst(arr, 3, i, j);watch(arr);breathe = change(arr, -1, 1); // 回溯if (breathe >= 2){result[1] += count;}breathe = 0;    // 回溯count = 0;}}}}// 函数二:①找气   ②找相连的相同子,处理过的子置为0// 子状态,空为1,数过的空为-1,处理过黑白子置为0,黑子3,白子2void deepFirst(vector<vector<int>> &arr, int type, int i, int j){// 该子越界if (i < 0 || i >= arr.size() || j < 0 || j >= arr[0].size())  return;   // 该子为1,空if (arr[i][j] == 1){   arr[i][j] = -1;return;}// 该子不匹配else if (arr[i][j] != type)  {return;}// 该子为相连的子count++;arr[i][j] = 0;// 递归deepFirst(arr, type, i + 1, j);deepFirst(arr, type, i - 1, j);deepFirst(arr, type, i, j+1);deepFirst(arr, type, i, j-1);}
};int main(){int N = 5;vector<vector<int>> arr = {{ 1, 1, 2, 3, 2, 3 },{ 3, 3, 2, 3, 3, 3 },{ 2, 2, 2, 3, 3, 3 },{ 1, 2, 2, 2, 3, 3 },{ 2, 1, 1, 2, 3, 1 }};Solution solution;solution.solve(arr);cout << solution.result[0] << "  " << solution.result[1];while (1);return 0;
}

简化的围棋棋子规则(C++实现)相关推荐

  1. 实现对象的复用——享元模式(三):围棋棋子的解决方案

    14.3 完整解决方案 为了节约存储空间,提高系统性能,Sunny公司开发人员使用享元模式来设计围棋软件中的棋子,其基本结构如图14-4所示: 在图14-4中,IgoChessman充当抽象享元类,B ...

  2. python 绘制围棋棋盘_围棋之规则基础(一)

    ★本期导读: 一.围棋的下法 二.气 ★正文: 一.围棋的下法 1. 对局双方各执一色棋子. 2. 空枰开局. 3. 黑先白后,交替着一子于棋盘的交叉点上. 4. 棋子下定后,不再向其它点移动. 5. ...

  3. Unity中国象棋(三)——各类棋子规则

    首先,新建一个RuleManager脚本,写下各类棋子的走棋规则,先贴上脚本 public class RuleManager : MonoBehaviour {/// <summary> ...

  4. 模板 31 : 并查集(围棋棋子连通)

    围棋的棋子有黑色和白色两种,相同颜色的棋子如果是上下或左右相邻的,则称这两个棋子是连通的,直接或间接连通的棋子称为一块棋. •现在,不断给出N个落棋子的信息(颜色.横坐标.纵坐标),问棋盘上有多少块棋 ...

  5. 翻译Deep Learning and the Game of Go(3)第2章:围棋是一个机器学习难题(规则部分就不翻了)

    本章涵盖 为什么游戏是AI的好项目? 为什么围棋是深度学习的难题? 围棋的规则是什么? 您可以通过机器学习解决游戏的哪些方面? 2.1 为什么要用游戏? 游戏是AI研究中最喜欢的主题,而不仅仅是因为它 ...

  6. python 围棋按照坐标查找棋子_深度优先搜索及python实现围棋“吃子”

    前言 "吃子"是围棋最基本的规则之一,但在编写围棋游戏要如何实现?深度优先搜索可以解决这个问题.本文分享的是个人使用深度优先搜索算法及python语言实现"吃子" ...

  7. matlab显示黑白棋子,围棋—暗藏在黑白棋子中的大智慧 你了解吗?

    文章来源:腾讯少儿围棋 那些暗藏在围棋黑白棋子之间的大智慧,是我们一定不能忽视的.好多家长觉得围棋不适合太小的孩子学,主要有两个原因.第一点就是,觉得围棋的难度过大,对于孩子来说,只能算是一个单纯的娱 ...

  8. Silverlight+WCF 新手实例 象棋 棋子移动-规则[兵、车](七)

    上两节实现了棋子的两种走法,吃子和没移动到线交叉点.不过我们都是没有规则的走,这节为棋子的走法增加规则,棋的规则我就不多说了,基本要找个不会下象棋的很难,就是找到的估计也不会看这文章. 当我们移动棋子 ...

  9. 实现一个围棋软件 | 版本与组成

    软件版本与围棋软件的组成 01 软件版本 考虑到Python在机器学习和人工智能领域使用的广泛性和便利性,本系列文章使用Python语言来实现智能算法.现代软件工程方法可以说是日新月异,有时候各个软件 ...

  10. 不会被计算机打败的棋类游戏,电脑首次打败人类围棋冠军意味着什么?

    从20世纪90年代开始,计算机已连续在国际象棋.跳棋.扑克和电视问答等游戏中打败人类.但是,有一种游戏,专业的人类选手依旧胜过机器,那就是围棋.这项具有2500多年历史的棋盘游戏非常复杂,游戏双方分别 ...

最新文章

  1. 2022-2028年中国边缘计算行业投资分析及前景预测报告(全卷)
  2. java timer.schedule如何控制执行次数_Java 分布式任务调度平台:PowerJob 快速开始+配置详解...
  3. cpc无法获取系统office信息_智能云信息发布系统解锁信息获取新方式
  4. Mycat原理、应用场景
  5. 深入理解 HTTPS
  6. 基于Redis优化首页轮播图查询
  7. Java Map集合面试题汇总
  8. sql intersect mysql_SQL INTERSECT子句
  9. Validator 使用总结
  10. hashMap 底层原理+LinkedHashMap 底层原理+常见面试题
  11. java中的“”和null的区别
  12. Adobe AIR教程:ANE面向IAP的测试和开发
  13. android开发 解析 b5,张绍文android开发高手课读书笔记4-启动优化篇
  14. python webshell_linux下python版webshell后门查杀工具
  15. GoldenGate新增表
  16. 对接谷歌翻译接口的WordPressSEO插件
  17. 南开100题C语言(021-030)
  18. NAT穿透的工作原理
  19. 2021最新爬虫教程
  20. [数据库笔记] SQL50题11 - 30

热门文章

  1. 双系统安装 Ubuntu 18.04 以及删除双系统中的 Ubuntu 的方法
  2. 移动辟谣飞信下线:飞信未来仍将大有作为
  3. 计算机竞赛奖学金申请书,计算机专业奖学金申请书
  4. ASP.NET实现日期转为大写的汉字
  5. COLORBOX常用的属性
  6. 老板必看:1.初创业团队没有激情,咋办? 2.小股东的选择
  7. 织梦域名后缀.html,织梦cms建站教程之首页域名后缀index.html去除的方法
  8. ipv6服务器及环境搭建
  9. deepin创建快捷方式图标
  10. 特征值和特征向量的作用