news 2026/6/10 12:16:01

第七届传智杯 初赛 小红的四子棋 题解 简单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/6/10 11:28:06

碎片化学习:DeepSeek 定制个人技术成长计划与知识点拆解

碎片化学习&#xff1a;DeepSeek 定制个人技术成长计划与知识点拆解前言&#xff1a;技术浪潮中的学习困境在信息技术飞速发展的今天&#xff0c;技术栈的更新迭代速度远超以往。开发者、工程师、数据科学家等技术从业者&#xff0c;面临着前所未有的学习压力。一方面&#xff…

作者头像 李华
网站建设 2026/6/9 23:31:46

DeepSeek vs 通义千问:代码生成场景准确率与响应速度实测分析报告

DeepSeek vs 通义千问&#xff1a;代码生成场景准确率与响应速度实测分析报告引言在人工智能技术飞速发展的今天&#xff0c;代码生成已成为提升开发效率的关键工具。本文通过200组严格设计的测试用例&#xff0c;对DeepSeek-R1&#xff08;以下简称DeepSeek&#xff09;与通义…

作者头像 李华
网站建设 2026/6/10 11:09:31

常用存储器介绍

存储器按其存储介质特性主要分为两大类&#xff1a;易失性存储器和非易失性存储器。易失性存储器&#xff1a;在断电后数据会丢失&#xff0c;如 RAM。非易失性存储器&#xff1a;即使断电也能保留数据&#xff0c;如 ROM、Flash&#xff0c;以及一些新兴技术。一、易失性存储器…

作者头像 李华
网站建设 2026/6/9 19:21:47

2025 年必须尝试的 5 个 Laravel 新特性

引言Laravel 一直在向世人证明&#xff0c;为什么它是最受欢迎的 PHP 框架之一。每一次版本更新&#xff0c;都能带来让日常开发更顺手、更干净、也更高效的新能力。如果你还没来得及研究最近的改动&#xff0c;下文这 5 个全新特性 值得你马上关注——从更聪明的事务回滚回调&…

作者头像 李华
网站建设 2026/6/9 11:41:44

8个降AI率工具,MBA高效写作必备

8个降AI率工具&#xff0c;MBA高效写作必备 AI降重工具&#xff1a;MBA论文写作的高效助手 在当今学术写作中&#xff0c;AI生成内容&#xff08;AIGC&#xff09;已成为普遍现象&#xff0c;但随之而来的高AIGC率和查重率问题也让许多MBA学生感到困扰。尤其在撰写高质量论文时…

作者头像 李华