220 - Othello (UVA)

题目链接如下:

Online Judge

我最终的代码如下(有个细节,88行输出时,需要%2d;locate函数第三个参数是0的话,代表只是判断是否可以放置;1代表下一步棋,包括替换被夹住的棋子):

#include <cstdio>
#include <algorithm>
// #define debug
const int sz = 10;int n, sum, xx, yy;
char board[sz][sz];
char op[4];
char curr, other;
int dirX[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dirY[] = {0, 1, 1, 1, 0, -1, -1, -1};int locate(int u, int v, int k){if(k == 0 && (board[u][v] == 'W' || board[u][v] == 'B')){return 0;}if(k == 1){board[u][v] = curr;}for(int i = 0; i < 8; ++i){for(int len = 1; len < 8; ++len){if(u + len * dirX[i] < 1 || u + len * dirX[i] > 8 || v + len * dirY[i] < 1 || v + len * dirY[i] > 8){break;}if(board[u + len * dirX[i]][v + len * dirY[i]] == curr){if(len == 1){break;}if(k == 0){return 1;}for(int j = 1; j < len; ++j){board[u + j * dirX[i]][v + j * dirY[i]] = curr;}break;}if(board[u + len * dirX[i]][v + len * dirY[i]] == '-'){break;}}}return 0;
}int main(){#ifdef debugfreopen("0.txt","r",stdin);freopen("1.txt","w",stdout);#endifscanf("%d\n", &n);for(int kase = 0; kase < n; ++kase){if(kase){printf("\n");}for(int i = 1; i <= 8; ++i){scanf("%s", board[i] + 1);}scanf("%s", op);curr = op[0];other = (curr == 'B' ? 'W' : 'B');while(scanf("%s", op)){if(op[0] == 'L'){sum = 0;for(int i = 1; i <= 8; ++i){for(int j = 1; j <= 8; ++j){if(locate(i, j, 0)){printf("%s(%d,%d)", sum ? " " : "", i, j);sum++;}}}printf("%s", sum ? "\n" : "No legal move.\n");} else if(op[0] == 'M'){if(!locate(op[1] - '0', op[2] - '0', 0)){std::swap(curr, other);}locate(op[1] - '0', op[2] - '0', 1);xx = yy = 0;for(int i = 1; i <= 8; ++i){for(int j = 1; j <= 8; ++j){if(board[i][j] == 'B'){xx++;} else if(board[i][j] == 'W'){yy++;}}}printf("Black - %2d White - %2d\n", xx, yy);std::swap(curr, other);} else{for(int i = 1; i <= 8; ++i){printf("%s\n", board[i] + 1);}break;}}}#ifdef debugfclose(stdin);fclose(stdout);#endifreturn 0;
}

一开始把判断能否放置棋子的函数和下一步棋的函数分开来写,代码如下:

#include <cstdio>
#include <algorithm>
// #define debug
const int sz = 10;int n, sum, xx, yy;
char board[sz][sz];
char op[4];
char curr, other;
int dirX[] = {1, 1, 0, -1, -1, -1, 0, 1};
int dirY[] = {0, 1, 1, 1, 0, -1, -1, -1};bool canLocate(int u, int v){if(board[u][v] == 'W' || board[u][v] == 'B'){return false;}for(int i = 0; i < 8; ++i){for(int len = 1; len < 8; ++len){if(u + len * dirX[i] < 1 || u + len * dirX[i] > 8 || v + len * dirY[i] < 1 || v + len * dirY[i] > 8){break;}if(board[u + len * dirX[i]][v + len * dirY[i]] == curr){if(len == 1){break;}return true;}if(board[u + len * dirX[i]][v + len * dirY[i]] == '-'){break;}}}return false;
}void locate(int u, int v){board[u][v] = curr;for(int i = 0; i < 8; ++i){for(int len = 1; len < 8; ++len){if(u + len * dirX[i] < 1 || u + len * dirX[i] > 8 || v + len * dirY[i] < 1 || v + len * dirY[i] > 8){break;}if(board[u + len * dirX[i]][v + len * dirY[i]] == curr){if(len == 1){break;}for(int j = 1; j < len; ++j){board[u + j * dirX[i]][v + j * dirY[i]] = curr;}break;}if(board[u + len * dirX[i]][v + len * dirY[i]] == '-'){break;}}}
}int main(){#ifdef debugfreopen("0.txt","r",stdin);freopen("1.txt","w",stdout);#endifscanf("%d\n", &n);for(int kase = 0; kase < n; ++kase){if(kase){printf("\n");}for(int i = 1; i <= 8; ++i){scanf("%s", board[i] + 1);}scanf("%s", op);curr = op[0];other = (curr == 'B' ? 'W' : 'B');while(scanf("%s", op)){if(op[0] == 'L'){sum = 0;for(int i = 1; i <= 8; ++i){for(int j = 1; j <= 8; ++j){if(canLocate(i, j)){printf("%s(%d,%d)", sum ? " " : "", i, j);sum++;}}}printf("%s", sum ? "\n" : "No legal move.\n");} else if(op[0] == 'M'){if(!canLocate(op[1] - '0', op[2] - '0')){std::swap(curr, other);}locate(op[1] - '0', op[2] - '0');xx = yy = 0;for(int i = 1; i <= 8; ++i){for(int j = 1; j <= 8; ++j){if(board[i][j] == 'B'){xx++;} else if(board[i][j] == 'W'){yy++;}}}printf("Black - %2d White - %2d\n", xx, yy);std::swap(curr, other);} else{for(int i = 1; i <= 8; ++i){printf("%s\n", board[i] + 1);}break;}}}#ifdef debugfclose(stdin);fclose(stdout);#endifreturn 0;
}

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

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

相关文章

【面试题精讲】Java 和 C++ 的区别?

“ 有的时候博客内容会有变动&#xff0c;首发博客是最新的&#xff0c;其他博客地址可能会未同步,认准https://blog.zysicyj.top ” 首发博客地址[1] 文章更新计划[2] 系列文章地址[3] 1. Java 和 C 是什么&#xff1f; Java 和 C都是流行的编程语言&#xff0c;用于开发各种类…

Android file

写文件——FileOutputStream openFileOutput 读文件——FileInputStream openFileInput openFileOutput写文件时当文件不存在&#xff0c;Android自动创建。 通过BufferedWriter直接写入字符串 public void writeFile(String inputText) {FileOutputStream outputStream nul…

RFID技术:钢条加工现场的智能化管理利器

RFID技术&#xff1a;钢条加工现场的智能化管理利器 RFID&#xff08;Radio Frequency Identification&#xff09;技术作为一种非接触式自动识别技术&#xff0c;近年来在工业领域得到广泛应用。本文将探讨RFID在钢条加工现场的应用&#xff0c;包括材料追踪与管理、生产过程…

本次CTF·泰山杯网络安全的基础知识部分

简记23年九月参加的泰山杯网络安全的部分基础知识的题目&#xff0c;随时补充 1. 国密算法哪个属于公钥&#xff1f; SM2 a. 国产密码算法&#xff08;国密算法&#xff09;是指国家密码局认定的国产商用密码算法&#xff0c;目前主要使用公开的SM2、SM3、SM4三类算法&#x…

安卓系列机型 框架LSP 安装步骤 支持多机型 LSP框架通用安装步骤【二】

​​​​​​安卓玩机教程---全机型安卓4----安卓12 框架xp edx lsp安装方法【一】 低版本可以参考上个博文了解相关安装方法。 LSP框架优点 简单来说装lsp框架的优点在于可以安装各种模块。包括 但不限于系统优化 加速 游戏开挂等等的模块。大致相当于电脑的扩展油猴 Lspos…

SAP服务器文件管理

SAP服务器文件管理 文件说明&#xff1a;对于SAP服务器的文件管理&#xff0c;系统给出3个事物码&#xff0c;分别是显示目录的AL11&#xff0c;下载文件的 CG3Y和上传文件的CG3Z。 AL11显示目录:以查找系统参数文件为例&#xff0c;在前台执行事物码AL11进入&#xff0c;如图…

word中使用latex多行公式,矩阵公式

\eqarray{H& [h(x_1)^T,\cdots,h(x_N)^T]^T \\ & [\matrix{g(w_1 x_1b_1) & \cdots & g(w_L x_1b_L) \\ \vdots & \ddots & \vdots \\ g(w_1 x_Nb_1) & \cdots & g(w_L x_Nb_L)}]_{N \times L}}&的引起的那条竖线可以通过backspace或者del…

网络基础面试题

1. ISO/OSI的七层模型 ISO国际标准化组织 OSI开放系统互连 TCP和UDP都会进行差错校验&#xff0c;TCP会告诉A包发错了&#xff0c;但UDP不会告诉A发错了会把包丢弃。 静态路由不需要路由器做任何的计算&#xff0c;对路由器的消耗是最小的&#xff0c;效率最高但是缺点是…

babel原理

Babel是一个非常流行的JavaScript编译器工具&#xff0c;其主要功能是将新版本的JavaScript代码转换为旧版本的代码&#xff0c;以便能够在旧版本的浏览器或环境中运行。 Babel的工作原理是通过将JavaScript代码解析为抽象语法树&#xff08;AST&#xff0c;Abstract Syntax T…

SQLyog 连接 MySQL8.0+ 报错2058

问题如下&#xff1a; 解决方案&#xff1a; 1.首先用命令窗口进入user表 2.使用有mysql.user表权限的用户连接mysql并执行如下命令&#xff1a; ALTER USER sqlyoglocalhost IDENTIFIED WITH mysql_native_password BY root23456; 注&#xff1a;使用mysql_native_password…

亿图脑图新版本支持思维导图一键生成PPT、音视频等格式,办公提效再升级

近日&#xff0c;国产思维导图软件——亿图脑图MindMaster发布了全新版本V10.9.0&#xff0c;本次亿图脑图的升级给用户带来了极大的惊喜。全新升级的亿图脑图MindMaster不仅支持20格式的文件智能解析成思维导图&#xff0c;还支持思维导图一键生成PPT、音频、视频等内容形式&a…

Linux命令教程:使用cat命令查看和处理文件

文章目录 教程&#xff1a;使用cat命令在Linux中查看和处理文件1. 引言2. cat命令的基本概述3. 查看文件内容4. 创建文件5. 文件重定向和管道6. 格式化和编辑文件7. 实际应用示例7.1 使用cat命令浏览日志文件7.2 利用cat命令合并多个配置文件7.3 使用cat命令将文件内容发送到其…

win32进程间通信方式(13种)

win32进程间通信 文件映射共享内存匿名管道命名管道远程过程调用&#xff08;RPC&#xff09;对象连接与嵌入&#xff08;OLE&#xff09;动态数据交换&#xff08;DDE&#xff09;剪贴板WM_COPYDATA消息邮件槽其它 文件映射 特点&#xff1a;本地间通信&#xff0c;不能用于网…

Excel实现只针对某项字符第一次出现的位置分列

取第一次出现左边数值 B1LEFT(A1,SEARCH(".",A1)-1) 取第一次出现右边数值 C1RIGHT(A1,LEN(A1)-SEARCH(".",A1)) 公式如图&#xff1a;

Vim快捷用法

以下为文本操作 1.快速切换 行首^(shift6) 行尾$(shift4) 文章开始gg 位置末尾G 向下翻页CTRLB 向上翻页CTRLF 2.删除内容 删除一行 dd 3.复制粘贴 复制一行yy 粘贴 p 4.撤销操作 撤销操作 u 恢复操作ctrlr 以下都为底行操作 1.显示行号 set nu 2.多文件分屏阅读 加入阅…

AI智能视频监控技术如何助力美好乡村建设?

随着城市化发展&#xff0c;很多乡村设施也在逐渐完善&#xff0c;智能监控也成了乡村发展必不可少的一环&#xff0c;智能视频监控应该在乡村建设里如何发挥作用呢&#xff1f; 1、有效提升安全意识 通过在乡村重要区域、公共场所、道路等设置智能视频监控设备&#xff0c;可…

第六次面试、第一次复试

第六面&#xff1a; hr迟到&#xff0c;说是搞错了以为线下&#xff0c;我打电话过去才开始&#xff0c;问我想电话面还是视频&#xff0c;果断电话面 自我介绍 介绍了一下公司的工作 ................. 项目拷打&#xff1a; grpc数据如何传输的如何调用两个接口如何获取…

CasaOS:一个docker容器应用的可视化Portal

CasaOS 官网声称他是一个家庭云操作系统&#xff0c;但我实际使用后感觉称之为“docker容器的可视化Portal”更合适。因为它本身不具备IAAS、PAAS、或SAAS的开箱即用能力&#xff0c;更像是一个把OS上的docker Container集中管理并展示的索引目录&#xff0c;各个docker Contai…

uni-app:点击图片进行图片旋转(可自定义旋转次数)

效果 代码 <template><view><view class"top_line"><view class"top_img"><image src"../../../static/bg/index.png" mode""></image></view><view class"top_button">…

java_Springboot_Mybatis-Plus_自定义多数据源MybatisSqlSessionFactoryBean配置

java_Springboot_Mybatis-Plus_自定义多数据源MybatisSqlSessionFactoryBean配置方法 目录 java_Springboot_Mybatis-Plus_自定义多数据源MybatisSqlSessionFactoryBean配置方法引言环境集成过程中遇到的问题Invalid bound statement (not found) 错误默认数据源问题 测试数据源…