博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SDUTOJ3754_黑白棋(纯模拟)
阅读量:5295 次
发布时间:2019-06-14

本文共 10514 字,大约阅读时间需要 35 分钟。

黑白棋

Time Limit: 1000 ms Memory Limit: 65536 KiB

 

Problem Description

黑白棋是一种喜闻乐见的益智游戏,今天,我们就来玩一下。

黑白棋的棋盘由 8×8 的方格组成。棋子为黑色(黑方的棋子)或白色(白方的棋子),下棋时棋子放置在方格内。

每轮游戏的规则是,双方交替下棋,将自己颜色的棋子放在棋盘的空格上,而当自己放下的棋子在横、竖、斜 8 个方向内有一个自己的棋子,则被夹在中间的所有连续的对方棋子全部会翻转成为自己颜色的棋子(可以横着夹,竖着夹,或是斜着夹,被夹住的位置必须全部是对手的棋子,且中间不能有空格),允许同时在多个方向上翻转。

只有当在一个位置落下一个棋子,并且能翻转对手一个或多个棋子时,这个位置才是一个有效的下棋位置。当轮到某人时,可能存在一个或多个有效的下棋位置,也可能不存在有效的下棋位置。

 

例如:当前轮到黑方下棋,他的有效下棋位置在图中以凹陷效果标出。

3754

 

选择 4-C 位置下棋,则中间被夹住的白棋全部翻转为黑棋:

3754-2

 

现在给你一个当前棋局的盘面,并且给出这一轮下棋的人的执子颜色以及他想要下棋的位置,请你判断一下他的下棋位置是否是有效位置,如果是,则输出下棋之后的盘面。

Input

输入数据有多组(数据组数不超过 50),到 EOF 结束。

对于每组数据:

  • 第一行输入一个字符串,为 "BLACK" 或 "WHITE",表示现在轮到哪一方下棋。
  • 接下来输入 8 行字符串,每行字符串包含 8 个字符,表示当前盘面。其中 '.' 表示空白位置,'B' 表示黑棋,'W' 表示白棋。
  • 最后一行输入用空格隔开的两个整数 a, b,表示棋手想要下棋的位置(第 a 行 第 b 列)。

Output

对于每组数据,如果当前棋手的下棋位置有效,则输出下棋之后的盘面和黑白棋手各自的得分,否则只输出一行 “invalid”(不包含引号)。

Sample Input

BLACK...........................WB......BW...........................4 3WHITE....................W.....BBBB.....WBB....W.....................5 7

Sample Output

..................BBB......BW...........................4:1....................W.....BBBW.....WWWW...W.....................3:7

Hint

对于第一组示例,对应题目描述中的图片。

对于第二组示例,白方下棋位置在 (5, 7),是一个有效位置。以 (5, 7) 为中心的 8 个方向中,向左可以和 (5, 4) 处的白棋一起夹住并翻转 2 个黑棋,向左上可以和 (3, 5) 处的白棋一起夹住翻转 1 个黑棋。

Source

【2016级《程序设计基础(B)I》期末上机考试-第一场】bLue

废了很大的力气才写出来  存一下留念吧  哈哈哈 300行

#include 
using namespace std;char s1[10];char s[10][10];int main(){ int n, m; while (~scanf("%s", s1)) { int flag = 0; for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) cin >> s[i][j]; } if (strcmp(s1, "BLACK") == 0) { cin >> n >> m; s[n][m] = 'B'; for (int i = m + 1; i <= 8; i++) // 找右 { if (s[n][i] == '.') break; if (s[n][i] == 'W') continue; if (s[n][i] == 'B') { for (int j = i - 1; j >= m + 1; j--) { s[n][j] = 'B'; flag = 1; } break; } } for (int i = m - 1; i >= 0; i--) // 左 { if (s[n][i] == '.') break; if (s[n][i] == 'W') continue; if (s[n][i] == 'B') { for (int j = i + 1; j <= m - 1; j++) { s[n][j] = 'B'; flag = 1; } break; } } for (int i = 1; n + i <= 8; i++) // 找下 { if (s[n + i][m] == '.') break; if (s[n + i][m] == 'W') continue; if (s[n + i][m] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n + j][m] = 'B'; flag = 1; } break; } } for (int i = 1; n - i >= 0; i++) // 上 { if (s[n - i][m] == '.') break; if (s[n - i][m] == 'W') continue; if (s[n - i][m] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n - j][m] = 'B'; flag = 1; } break; } } for (int i = 1; n - i >= 0 && m + i <= 8; i++) // 右上 { if (s[n - i][m + i] == '.') break; if (s[n - i][m + i] == 'W') continue; if (s[n - i][m + i] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n - j][m + j] = 'B'; flag = 1; } break; } } for (int i = 1; n + i <= 8 && m - i >= 0; i++) // 左下 { if (s[n + i][m - i] == '.') break; if (s[n + i][m - i] == 'W') continue; if (s[n + i][m - i] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n + j][m - j] = 'B'; flag = 1; } break; } } for (int i = 1; n - i >= 0 && m - i >= 0; i++) // 左上 { if (s[n - i][m - i] == '.') break; if (s[n - i][m - i] == 'W') continue; if (s[n - i][m - i] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n - j][m - j] = 'B'; flag = 1; } break; } } for (int i = 1; n + i <= 8 && m + i <= 8; i++) // 右下 { if (s[n + i][m + i] == '.') break; if (s[n + i][m + i] == 'W') continue; if (s[n + i][m + i] == 'B') { for (int j = 1; j <= i - 1; j++) { s[n + j][m + j] = 'B'; flag = 1; } break; } } } if (strcmp(s1, "WHITE") == 0) { cin >> n >> m; s[n][m] = 'W'; for (int i = m + 1; i <= 8; i++) // 找右 { if (s[n][i] == '.') break; if (s[n][i] == 'B') continue; if (s[n][i] == 'W') { for (int j = i - 1; j >= m + 1; j--) { s[n][j] = 'W'; flag = 1; } break; } } for (int i = m - 1; i >= 0; i--) // 左 { if (s[n][i] == '.') break; if (s[n][i] == 'B') continue; if (s[n][i] == 'W') { for (int j = i + 1; j <= m - 1; j++) { s[n][j] = 'W'; flag = 1; } break; } } for (int i = 1; n + i <= 8; i++) // 找下 { if (s[n + i][m] == '.') break; if (s[n + i][m] == 'B') continue; if (s[n + i][m] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n + j][m] = 'W'; flag = 1; } break; } } for (int i = 1; n - i >= 0; i++) // 上 { if (s[n - i][m] == '.') break; if (s[n - i][m] == 'B') continue; if (s[n - i][m] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n - j][m] = 'W'; flag = 1; } break; } } for (int i = 1; n - i >= 0 && m + i <= 8; i++) // 右上 { if (s[n - i][m + i] == '.') break; if (s[n - i][m + i] == 'B') continue; if (s[n - i][m + i] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n - j][m + j] = 'W'; flag = 1; } break; } } for (int i = 1; n + i <= 8 && m - i >= 0; i++) // 左下 { if (s[n + i][m - i] == '.') break; if (s[n + i][m - i] == 'B') continue; if (s[n + i][m - i] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n + j][m - j] = 'W'; flag = 1; } break; } } for (int i = 1; n - i >= 0 && m - i >= 0; i++) // 左上 { if (s[n - i][m - i] == '.') break; if (s[n - i][m - i] == 'B') continue; if (s[n - i][m - i] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n - j][m - j] = 'W'; flag = 1; } break; } } for (int i = 1; n + i <= 8 && m + i <= 8; i++) // 右下 { if (s[n + i][m + i] == '.') break; if (s[n + i][m + i] == 'B') continue; if (s[n + i][m + i] == 'W') { for (int j = 1; j <= i - 1; j++) { s[n + j][m + j] = 'W'; flag = 1; } break; } } } if (!flag) cout << "invalid" << endl; else { for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) printf("%c", s[i][j]); cout << endl; } int w = 0, b = 0; for (int i = 1; i <= 8; i++) { for (int j = 1; j <= 8; j++) { if (s[i][j] == 'B') b++; else if (s[i][j] == 'W') w++; } } cout << b << ":" << w << endl; } } return 0;}/***************************************************User name: jk180602Result: AcceptedTake time: 0msTake Memory: 156KBSubmit time: 2019-01-04 22:40:10****************************************************/

 

转载于:https://www.cnblogs.com/iQXQZX/p/10258736.html

你可能感兴趣的文章
HDU4405--Aeroplane chess(概率dp)
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
MVC,MVP 和 MVVM 的图示,区别
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>
使用Chrome(PC)调试移动设备上的网页
查看>>
使用gitbash来链接mysql
查看>>
SecureCRT的使用方法和技巧(详细使用教程)
查看>>
右侧导航栏(动态添加数据到list)
查看>>
81、iOS本地推送与远程推送详解
查看>>
虚拟DOM
查看>>
uva 11468 Substring
查看>>
自建数据源(RSO2)、及数据源增强
查看>>