炫酷五子棋

2024-06-17 21:18
文章标签 五子棋 炫酷

本文主要是介绍炫酷五子棋,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

【题目描述】

五子棋是一个简单的双人游戏。

小希最近在思索一种更好玩的五子棋。她希望胜利不再是谁先五子连珠谁赢,而变成谁落子后,该子与之前的子五子连珠的次数更多才能胜利。

但是如果是在普通的棋盘上,这个游戏又显得不是很有趣,所以她将棋盘扩大至N*N,因为棋盘过大,没有一个程序能将其展示出来,所以如何落子只能凭借记忆。

她希望你能写一个程序,判断每步落子与之前的同色棋子是否能形成五子连珠。

五子连珠是指是横着竖着或者斜着的八个方向存在连续的颜色相同的至少五个子。

注意:这个版本的五子棋仍然是双人游戏,先手执黑,后手执白。同色才是五子棋。

【输入描述】

第一行一个正整数N,M,表示棋盘大小和落子次数。
随后M行,每行两个整数 xi,yi,表示落子位置。
N,M≤300,000
1≤xi,yi≤N

数据保证同一个子的位置不会多次落子。

【输出描述】

对于每一个子,一行,如果该步落下后,该子和其他子能形成五子连珠,输出一个大写的'Y',否则输出一个大写的'N'。

【样例】

示例1

输入
6 12
1 1
6 1
2 2
5 2
3 3
4 3
4 4
3 4
5 5
2 5
6 6
1 6
输出
N
N
N
N
N
N
N
N
Y
Y
Y
Y

思路:首先使用 map 来存放棋子的坐标与颜色,然后进行搜索,只需要棋子计算其他 4 个方向(双向)连续的棋子数,可以进行剪枝优化,即当该棋子某一方向的棋子数达到 4 个,就可以停止

【源代码】

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
#include<cmath>
#include<ctime>
#include<algorithm>
#include<utility>
#include<stack>
#include<queue>
#include<vector>
#include<set>
#include<map>
#define PI acos(-1.0)
#define E 1e-6
#define INF 0x3f3f3f3f
#define N 300001
#define LL long long
const int MOD=1e9+7;
using namespace std;
int n,m;
map<int,bool> chesspiece[N];//1为黑色,0为白色
int dx[]={1,1,0,-1,-1,-1,0,1};
int dy[]={0,1,1,1,0,-1,-1,-1};
bool inBound(int x,int y) {//棋盘边界判断return x<=n && x>=1 && y<=n && y>=1;
}
int calculate(int x,int y,int k){int sum=1;//棋子总数while(sum<=5){int nx=x+dx[k]*sum;int ny=y+dy[k]*sum;if(!inBound(x,y) || !chesspiece[nx].count(ny) || chesspiece[x][y]!=chesspiece[nx][ny])return sum-1;sum++;}return sum;
}
bool judge(int x,int y,bool color){chesspiece[x][y]=color;for(int i=0;i<4;i++){int plus=calculate(x,y,i);//正方向int minus=calculate(x,y,i+4);//反方向if(plus+minus+1>=5)//总数大于5return true;}return false;
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){int x,y;cin>>x>>y;if(judge(x,y,i%2))cout<<"Y"<<endl;elsecout<<"N"<<endl;}return 0;
}

 

这篇关于炫酷五子棋的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1070508

相关文章

8阶段项目:五子棋(附带源码)

8阶段项目:五子棋 8.1-技术实现 1.静态变量 静态变量只能定义在类中,不能定义在方法中。静态变量可以在static修饰的方法中使用,也可以在非静态的方法中访问。主要解决在静态方法中不能访问非静态的变量。 2.静态方法 静态方法就相当于一个箱子,只是这个箱子中装的是代码,需要使用这些代码的时候,就把这个箱子放在指定的位置即可。   /*** 静态变量和静态方法*/public cl

[期末]MVC模式写一个Java五子棋(含完整源码及简单AI)

GobangGame 一个下五子棋的java小程序 本程序参考翁恺老师细胞模拟机的控制模式编写 概述及目标 五子棋是一种两人对弈的纯策略型棋类游戏,通常双方分别使用两色的棋子,下在棋盘上,先形成5子连线者获胜。 本程序有命令行界面与图形化界面,用户通过相应方式输入下子位置后与Robot进行对战。 MVC 模式 本小程序尝试使用MVC 模式编写。 MVC 模式代表 M

HTML 实现炫酷选项卡效果

在前端开发中,创造出吸引人的交互效果能够极大地提升用户体验。今天,我将分享一段使用 HTML 和 CSS 实现的炫酷选项卡代码,并详细介绍其实现过程。 一、效果展示 我们的选项卡效果具有以下特点: 整体布局美观大方,页面居中显示。选项卡标签颜色鲜艳,分别为紫色(#a55eea)、蓝色(#45aaf2)和绿色(#26de81),且带有圆角边框和白色文字,鼠标悬停时透明度变为 0.7,增加交互反

蓝色炫酷碎粒子HTML5导航源码

源码介绍 蓝色炫酷碎粒子HTML5导航源码,源码由HTML+CSS+JS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面,重定向这个界面 效果预览 源码获取 蓝色炫酷碎粒子HTML5导航源码

使用b站开源弹幕引擎实现炫酷的弹幕效果

转载请注明出处 作者:AboutJoke ( http://blog.csdn.net/u013200308 ) 原文链接:http://blog.csdn.net/u013200308/article/details/57123100 现在各大视屏网站都有了弹幕功能,但显示效果最好的非b站莫属了。如果你也想拥有和b站一样炫酷的弹幕效果,那么就跟着我来一步步实现。 首先放上地址 h

《Linux操作系统》vim配置与使用 - 超级炫酷的配置vim文件

方法一: 1.打开终端,在命令行中输入命令 cd /etc/vim/ 后敲回车,进入/etc/vim目录; 2.进入etc/vim目录后,找到vimrc文件(vim的初始化文件),使用cp命令对其进行备份,命令为: sudo cp vimrc vimrc.bak //备份是一种安全机制,要谨记 3.用管理员权限打开vimrc,命令为:sudo vi vimrc 4.打开后,在vimrc文件最后

五子棋游戏中判断胜负的C++源代码

今天在看《精通Windows Sockets 网络开发——基于Visual C++》(孙海民 编著,人民邮电出版社出版)这本书的时候,有一个网络五子棋游戏的实例,个人觉得除了服务器和客户端通信、管理用户列表之外,在每一步中判断黑方和白方哪一方获胜是这个游戏程序的关键。所以将源代码贴在这里,供大家学习参考:         说明:这个程序不能直接运行,只是说明判断胜负的算法。

别找AE模板了,这10个ae模板网站,小白也能做出炫酷视频

上次把免费且优质的视频素材网站做成了一个合集,从人物风景 影视剧片段 到 3d素材等等依次做了汇总,并列出了版权说明。 别囤了!这些视频素材网站,绝对值得收藏! 而如果你想在短期内又快又好地制作视频,使用别人做好的AE 视频模板,无疑是最方便的技巧。这次给大家整理了好用的 AE 模板网站,国内国外都有(国外没有版权问题)并以一个Ae模板为例,介绍使用模板时可能会遇到的问题及对应的解决方

Ant-Design-Vue快速入门+排坑全攻略:打造炫酷Vue应用的s实用指南!

Ant-Design-Vue 是一个基于 Vue.js 的高质量 UI 组件库,适用于企业级后台产品的快速开发。下面将提供一份快速上手指南,并分享一些常见的“坑”和解决方案。 一、Ant-Design-Vue 快速上手指南 1. 安装与引入 确保安装了 Node.js(推荐使用最新的稳定版)。 使用 npm 或 yarn 安装 Ant-Design-Vue。 # 使用 npm npm

五子棋理解C++思想

双人五子棋项目目录: class Game {public:Game();void init();bool waitPlayerPutChess(Player* player, int& oldi, int& oldj);void draw();void play();bool isOver(int playerId);public:int whoWin = -1; // 谁赢了(0:白棋