搜索 C. Tic-tac-toe

Problem - C - Codeforces

image-20231126001519574

思路:搜索,判断合法性。从起始态用搜索进行模拟,这样可以避免后面判断合法性这一繁琐的步骤。用一个map进行映射当前态及对应的结果。剪枝:如果当前字符串已经被搜索过,则直接跳过去。

代码实现:

void solve() {array<string, 3> st;cin>>st[0]>>st[1]>>st[2];array<string, 3> ph;ph[0] = "...";ph[1] = "..."; ph[2] = "...";map<array<string,3>, string> mp;// 判断是否赢auto check = [&](char ch) -> bool {// 行for(int i = 0; i < 3; ++i) {bool ok = true;for(int j = 0; j < 3; ++j) {ok &= ph[i][j] == ch;}if(ok) return 1;}// 列for(int i = 0; i < 3; ++i) {bool ok = true;for(int j = 0; j < 3; ++j) {ok &= ph[j][i] == ch;}if(ok) return 1;}// 对角线if(ph[0][0] == ch && ph[1][1] == ch && ph[2][2] == ch) return 1;if(ph[2][0] == ch && ph[1][1] == ch && ph[0][2] == ch) return 1;return 0;};// 先是A X// B 0// 从起始态进行搜索auto dfs = [&](auto&& self, int step) -> void {if(check('X')) {mp[ph] = "the first player won";return ;} else if(check('0')) {mp[ph] = "the second player won";return ;} else if(step == 9) {mp[ph] = "draw";return ;}mp[ph] = step % 2 == 0 ? "first" : "second";for(int i = 0; i < 3; ++i) {for(int j = 0; j < 3; ++j) {if(ph[i][j] != '.') continue;ph[i][j] = step % 2 == 0 ? 'X' : '0';if(mp.find(ph) == mp.end())self(self, step + 1);ph[i][j] = '.';}}};dfs(dfs, 0);// 如果在合法态中没有找到就是非法的。if(mp.find(st) == mp.end()) cout<<"illegal";else {cout<<mp[st];}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/218422.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

交换机的VRRP主备配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

最新AI创作系统ChatGPT网站运营源码、支持GPT-4-Turbo模型,图片对话识图理解,支持DALL-E3文生图

一、AI创作系统 SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧&#xff01;本系统使用NestjsVueTypescript框架技术&#xff0c;持续集成AI能力到本系统。支持OpenAI DALL-E3文生图&#xff0c;…

网页设计作业-音乐网站首页

效果图 网盘链接 链接&#xff1a;https://pan.baidu.com/s/1CO4jAOY0zk1AWTx_pC3UmA?pwdfuck 提取码&#xff1a;fuck

macos安装小软件 cmake

一&#xff0c;cmake下载主页 Download CMake 二&#xff0c;下载&#xff0c;解压&#xff0c;配置&#xff0c;编译&#xff0c;安装 0. 假设macos中已经存在了 clang和make工具 1. 通过网页下载最新的稳定版 cmake***.tar.gz 源代码 2. tar zxf cmake***.tar 3. cd cmake***…

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…

雅可比矩阵(Jacobian Matrix)

假设给定一个从n维欧式空间到m维欧式空间的变换: 雅可比矩阵就是将一阶偏导数排列成一个m行、n列形式的矩阵&#xff0c;记作&#xff1a; 举一个例子&#xff1a; 雅可比矩阵等于&#xff1a;

解决视口动画插件jquery.aniview.js使用animate.css时无效的问题(最新版本网页视口动画插件的使用及没作用、没反应)

当网站页面元素进入视口时自动应用过渡效果。CSS过渡效果可以为网页添加动画效果&#xff0c;并提供了一种平滑的转换方式&#xff0c;使元素的变化更加流畅和生动。而通过jQuery插件来获取页面滚动位置决定合适调用动画效果。 一、官网 animate.css官网 一款强大的预设css3动…

Mybatis-Plus 租户使用

Mybatis-Plus 租户使用 文章目录 Mybatis-Plus 租户使用一. 前言1.1 租户存在的意义1.2 租户框架 二. Mybatis-plus 租户2.1 租户处理器2.2 前置准备1. 依赖2. 表及数据准备3. 代码生成器 2.3 使用 三. 深入使用3.1 前言3.2 租户主体设值&#xff0c;取值3.3 部分表全量db操作3…

基于 STM32 的温度测量与控制系统设计

本文介绍了如何基于 STM32 微控制器设计一款温度测量与控制系统。首先&#xff0c;我们将简要介绍 STM32 微控制器的特点和能力。接下来&#xff0c;我们将详细讨论温度传感器的选择与接口。然后&#xff0c;我们将介绍如何使用 STM32 提供的开发工具和相关库来进行温度测量和控…

PostgreSQL 分区表插入数据及报错:子表明明存在却报不存在以及column “xxx“ does not exist 解决方法

PostgreSQL 分区表插入数据及报错&#xff1a;子表明明存在却报不存在以及column “xxx“ does not exist 解决方法 问题1. 分区表需要先创建子表在插入&#xff0c;创建子表立马插入后可能会报错子表不存在&#xff1b;解决&#xff1a; 创建子表及索引后&#xff0c;sleep10毫…

Feast:概念

实体 实体是语义相关特征的集合。用户定义实体以映射其用例的领域。 例如&#xff0c;打车车服务可以将客户和司机作为实体&#xff0c;这些实体将相关特征分组&#xff0c;对应于这些客户和司机。 driver Entity(namedriver, join_keys[driver_id]) # 司机实体 customer E…

从0到0.01入门 Webpack| 007.精选 Webpack面试题

&#x1f90d; 前端开发工程师&#xff08;主业&#xff09;、技术博主&#xff08;副业&#xff09;、已过CET6 &#x1f368; 阿珊和她的猫_CSDN个人主页 &#x1f560; 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 &#x1f35a; 蓝桥云课签约作者、已在蓝桥云…