news 2026/5/1 5:07:19

第七届传智杯 初赛 小红的四子棋 题解 简单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/4/16 15:20:11

关键词解释:教师-学生网络(Teacher-Student Network)

一句话概括&#xff1a; 教师-学生网络是一种“让一个模型教另一个模型”的学习框架——教师提供稳定、高质量的指导信号&#xff0c;学生通过模仿来学得更好、更快、更鲁棒。它广泛用于模型压缩、自监督学习和半监督学习&#xff0c;是现代 AI 系统的核心技术之一。一、通俗理…

作者头像 李华
网站建设 2026/5/1 8:04:21

ASP.NET Core Blazor 核心功能一:Blazor依赖注入与状态管理指南

一、依赖注入基础 Blazor 提供了强大的依赖注入&#xff08;Dependency Injection, DI&#xff09;功能&#xff0c;用于将服务以解耦的方式注入到组件中,它帮助我们实现松耦合的代码设计&#xff0c;提高可测试性和可维护性。 什么是依赖注入&#xff1f; 依赖注入是一种设计…

作者头像 李华
网站建设 2026/5/1 4:58:31

改善深层神经网络 第一周:深度学习的实践(一)偏差与方差

本周为第二课的第一周内容&#xff0c;就像课题名称一样&#xff0c;本周更偏向于深度学习实践中出现的问题和概念&#xff0c;在有了第一课的机器学习和数学基础后&#xff0c;可以说&#xff0c;在理解上对本周的内容不会存在什么难度。当然&#xff0c;我也会对一些新出现的…

作者头像 李华
网站建设 2026/5/1 3:30:39

谁生?谁死?从引用计数到可达性分析,洞悉GC的决策逻辑

用计数与可达性分析&#xff1a;谁死了&#xff0c;谁还活着&#xff1f;垃圾回收&#xff0c;顾名思义&#xff0c;便是将已经分配出去的&#xff0c;但却不再使用的内存回收回来&#xff0c;以便能够再次分配。在Java虚拟机的语境下&#xff0c;垃圾指的是死亡的对象所占据的…

作者头像 李华
网站建设 2026/5/1 6:00:55

计算机Java毕设实战-基于springboot的演唱会购票系统的设计与实现线上线下结合的数字化票务管理【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华