news 2026/5/26 4:23:43

第七届传智杯 初赛 小红的四子棋 题解 简单bfs遍历

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
第七届传智杯 初赛 小红的四子棋 题解 简单bfs遍历

描述

小红和小紫正在下一个名字叫"四子棋"的游戏。游戏的规则如下:
棋盘是一个nn行mm列的矩阵,两人轮流下子。如果有一方出现横、竖或者斜对角线方向有4个或4个以上的相同颜色的连珠,则获得游戏胜利。
小红拿到了棋盘的终局,她想知道是谁获得了胜利。

输入描述:

第一行输入两个正整数 nn 和 mm,用空格隔开。
接下来的nn行,每行输入一个长度为mm的字符串,字符串仅由'r'、'p'和'.'三种字符组成。'r'代表小红的棋子,'p'代表小紫的棋子,'.'代表未落子。
保证'r'和'p'的数量之差的绝对值不超过1。
保证连珠不超过7个棋子。
保证不会两种颜色的棋子都连珠。
4≤n,m≤1004≤n,m≤100

输出描述:

如果小红获胜,则输出"kou"

如果小紫获胜,则输出"yukari"

如果暂时无人获胜,则输出"to be continued"

示例1

输入:

4 5 rpprr prrpp p.r.. p..r.

输出:

kou

说明:

小红连成了一个斜对角线方向的四连珠。

思路:

因为数据范围小,我们可以直接暴力遍历每一个点与四个方向的其他3个点是否可以连成4个相同的子(即以这一个点坐标为基准,8个方向分横,竖,右斜,左斜暴力遍历一次),判断输出答案即可。

我的代码:

#include <iostream> #include<queue> #include<algorithm> #include<map> #include<vector> #include<set> #include<stack> #include<string> #include<math.h> #include <iomanip> #include<unordered_map> #include <unordered_set> #include<array> #define gets(S) fgets(S,sizeof(S),stdin) #define ll long long const ll N = 2e6 + 5; const ll Max = 0x3f3f3f3f; using namespace std; ll n, m; char saki[1145][1145]; struct mjk{ ll x, y; }; queue<mjk>mzm; bool bfs(ll x, ll y) { if (saki[x][y] == '.')return 0; ll cnt = 0; for (int i = x - 3; i <= x + 3; i++) { if (i < 1 || i>n)continue; if (saki[i][y] == saki[x][y])cnt++; else cnt = 0; if (cnt == 4)return 1; } cnt = 0; for (int i = y - 3; i <= y + 3; i++) { if (i<1 || i>m)continue; if (saki[x][i] == saki[x][y])cnt++; else cnt = 0; if (cnt == 4)return 1; } cnt = 0; for (int i = x - 3, j = y - 3; i <= x + 3, j <= y + 3; i++, j++) { if (i < 1 || i>n || j<1 || j>m)continue; if (saki[i][j] == saki[x][y])cnt++; else cnt = 0; if (cnt == 4)return 1; } cnt = 0; for (int i = x + 3, j = y - 3; i <= x - 3, j <= y + 3; i--, j++) { if (i < 1 || i>n || j<1 || j>m)continue; if (saki[i][j] == saki[x][y])cnt++; else cnt = 0; if (cnt == 4)return 1; } return 0; } int main() { cin >> n >> m; for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { cin >> saki[i][j]; } } for (int i = 1; i <= n; i++) { for (int j = 1; j <= m; j++) { if (bfs(i, j)) { cout << (saki[i][j] == 'r' ? "kou" : "yukari"); return 0; } } } cout << "to be continued"; return 0; }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/25 20:57:27

FreeFileSync (文件夹比较同步) v14.6

下载地址 https://pan.quark.cn/s/0dbf570fa2ac 介绍 FreeFileSync是一个文件夹比较和同步软件&#xff0c;可以创建和管理所有重要文件的备份副本。FreeFileSync不是每次都复制每个文件&#xff0c;而是确定源文件夹和目标文件夹之间的差异&#xff0c;并仅传输所需的最少数…

作者头像 李华
网站建设 2026/5/25 5:14:46

对 Promise.race 的理解

基础问答问&#xff1a;有使用过 Promise.race 吗&#xff0c;说说他的作用。答&#xff1a;Promise.race 接收一个 Promise 数组&#xff08;或者一个具有迭代器的对象&#xff09;作为参数&#xff0c;返回一个新的Promise&#xff0c;这个新的 Promise 结果是数组中第一个状…

作者头像 李华
网站建设 2026/5/25 23:48:20

)关于机器那些事儿

机器这个概念&#xff0c;在监控系统里具有比较特殊的场景。核心是因为两个原因&#xff1a;机器上面的服务有时会混部&#xff0c;导致机器和业务程序之间的对应关系不好搞&#xff08;这就是对待机器不能像对待 Pod 的原因&#xff09;采集器 agent 通常部署在机器上&#xf…

作者头像 李华
网站建设 2026/5/25 15:48:18

谷歌Gemini更新:手写编辑图片及识别AI视频功能详解

谷歌Gemini更新&#xff1a;手写编辑图片及识别AI视频功能详解 Gemini应用迎来智能升级&#xff01; 谷歌为其Gemini应用推出新更新&#xff0c;新增功能使AI工具更贴近日常使用。用户现可通过Nano Banana工具直接在照片上涂鸦或标注来编辑图像&#xff0c;简化创意修改流程。此…

作者头像 李华