尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

第七届传智杯 初赛 小红的四子棋 题解 简单bfs遍历
📅 发布时间:2026/6/23 1:15:21

描述

小红和小紫正在下一个名字叫"四子棋"的游戏。游戏的规则如下:
棋盘是一个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; }

相关新闻

  • 对 Promise.race 的理解
  • 用Kotlin 的图像验证码识别系统设计与实现
  • 调用api练习(1)

最新新闻

  • AgentLife 实战:把本地 AI Agent 接进钉钉群,告警来了自动排查
  • 智能穿戴中的健康监测与数据分析
  • Visual C++运行库一键修复:5分钟解决Windows软件启动问题完整指南
  • 3分钟永久激活Windows和Office:KMS_VL_ALL_AIO智能激活完全指南
  • AVR TCD定时器输入模式与Dithering技术:高精度测量与PWM控制
  • 如何用Translumo实现Windows屏幕实时翻译:终极免费解决方案

日新闻

  • Arduino-ESP32项目深度解析:解锁隐藏芯片支持与架构演进
  • 2026年 系统窗厂家/品牌推荐榜单:隔音系统窗+高端系统门窗的核心优势与选购指南 - 品牌发掘
  • NVBench:首个双语非言语发声语音合成评测基准详解与实践

周新闻

  • Visual C++运行库修复终极指南:5分钟快速解决Windows软件启动错误
  • 手把手教你构建统计局地区经济数据爬虫:从环境搭建到数据持久化全指南
  • 2026多Agent深度解析:用AI团队替代单一模型,四种架构实战落地

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号