一道简单的利用dfs思想解决的水题,写这篇文章只是为了忏悔为什么疫情在家学习的时候没有好好学习数据结构以及大二没有好好写过题,导致快大四了还要重头学数据结构(感谢我的老师让我数据结构飘过)

这道题我大一上学期还没开摆的时候就看过了,那时候数据结构、算法什么的基本一窍不通,只会一些简单的c语言,连期末考试那道简单的递归题目都做不出来orz

到了大三下学期,重新看这道题,觉得是如此的简单...实在是为当初的摆烂后悔不已..也希望看到这篇文章的学弟学妹们不管是什么专业的,都要好好学习,是软件/计算机专业的要好好学数据结构和算法,别等到大三了才来后悔,不要因为一时的困难就摆烂,摆烂是解决不了任何问题的

主要思想:用一个队列保存矩阵里所有字符'y'的位置,然后依次出队用dfs走迷宫的思想去判断八个不同方向的字符串能否构成'yizhong'

完整代码:

#include <iostream>
#include <queue>
typedef std::pair<int, int> pair;int n;
char arr[105][105];
char ans[105][105];/*用字符矩阵保存结果,可不用字符矩阵,即使用bool矩阵判断即可*/
const char* ch = "yizhong";
std::queue<pair> q;
/*八个不同的方向判断是否能构成'yizhong'这个字符串*/
int dx[8] = { -1,1,0,0,-1,-1,1,1 };
int dy[8] = { 0,0,-1,1,-1,1,-1,1 };int main() {std::ios::sync_with_stdio(false);std::cin.tie(0);std::cin >> n;for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {std::cin >> arr[i][j];if (arr[i][j] == 'y') q.push(pair(i, j));}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {ans[i][j] = '*';}}int k;int flag;while (!q.empty()) {pair p = q.front(); q.pop();for (int i = 0; i < 8; i++) {k = 1;/*flag存储哪个方向的字符串可以匹配给定字符串*/flag = i;int nx = p.first;int ny = p.second;/*'y'已经是判断好的了,只需要判断'izhong'即可*/for (int j = 0; j < 6; j++) {nx += dx[i];ny += dy[i];/*如果当前字符匹配则继续进行下一个字符匹配*/if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && arr[nx][ny] == ch[k]) k++;/*如果当前字符不匹配则设置flag为-1*/else if (nx >= 1 && nx <= n && ny >= 1 && ny <= n && arr[nx][ny] != ch[k]) {flag = -1;break;}/*其他情况*/else {flag = -1;break;}}/*找到哪个方向可以之后就设置ans矩阵*/if (flag != -1) {int c = 1;ans[p.first][p.second] = 'y';int nx = p.first;int ny = p.second;for (int j = 0; j < 6; j++) {nx += dx[flag];ny += dy[flag];ans[nx][ny] = ch[c];c++;}}}}for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {printf("%c", ans[i][j]);}printf("\n");}return 0;
}

洛谷P1101 单词方阵相关推荐

  1. 洛谷P1101 单词方阵 (C语言 + 详细注释 + 五妙)

    //首先声明一下,我的代码大部分是参照洛谷的一位博客:Way_How_Fri3nd.看完后我就觉得写的非常好,由于我不知道怎么转载洛谷的博客,所以干脆自己写一篇CSDN博客,因为写的实在是太好了,我迫 ...

  2. 洛谷——P1101 单词方阵

    题目描述 给一n \times nn×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 88 个方向的任一方向,同一单词摆放时不 ...

  3. 洛谷 P1101 单词方阵

    给一n×n的字母方阵,内可能蕴含多个"yizhong"单词.单词在方阵中是沿着同一方向连续摆放的.摆放可沿着 8个方向的任一方向,同一单词摆放时不再改变方向,单词与单词之间可以交叉 ...

  4. 洛谷 P1101 单词方阵

    DFS的例题,难点在于所选的yizhong必须是一行的不能拐弯,我第一次写的时候直接在DFS里的判断条件里加了if(当前位置的字符==yizhong相应位置的字符)这样的语句,当然这样不对,因为没有保 ...

  5. 深度优先搜索——单词方阵(洛谷 P1101)

    题目选自洛谷P1101 这道题也是挺不错的DFS的题,但是区别于一般的深搜, 这道题在选定一个方向后,就不能改变了! 给出我的详细思路就是: 用char a[101][101]保存输入的数据,int ...

  6. 洛谷—题解 P1101 单词方阵

    原题链接P1101 单词方阵 有条件的小伙伴可以点进原网站开题,也可直接看我下面的截图 废话一堆  艾瑞巴蒂,我可爱的小伙伴们!我也是很久没有写题解了,因为疫情的关系,在家我TM实在太闲了-做做题,写 ...

  7. P1101 单词方阵

    P1101 单词方阵 https://www.luogu.org/problemnew/show/P1101 标签 难度 普及- 时空限制 1000ms / 128MB 提示:收藏到任务计划后,可在首 ...

  8. 洛谷P1101、P1019

    洛谷P1101 happy 2020年A的第一道题~(- ̄▽ ̄)- 题目大意:在一个二维字符数组中找到所有的连续'yizhong'的字符(各个方向),然后将其他的地方都用'*'替换掉. 解题思路:最开 ...

  9. 枚举求解单词方阵(洛谷P1101题题解,Java语言描述)

    题目要求 P1101题目链接 分析 可以用DFS做,但我立下了个Flag,所以就用了朴素的枚举来做.... 结果,我的天哪,做了好几个小时-- 其实这种地图题,真的适合 DFS or BFS or D ...

最新文章

  1. java 增强for循环(foreach)
  2. oracle virtualbox 添加共享硬盘
  3. 和ur的区别_UR机械臂simscape正逆解仿真
  4. CDH HUE集成yarn
  5. Jetbrains全系列完美破解--------亲测可用
  6. Android 动态绘制曲线等各种图形
  7. Android 设置Activity样式 透明度
  8. VueConf China 2021 《Vue3生态进展-尤雨溪》 Reaction
  9. python中可用于布尔测试的,如何在Python中使用布尔值?
  10. 【ZZ】Python安装模块出错(ImportError: No module named s...
  11. 第十六:Allure-pytest功能特性介绍
  12. 全国大学生计算机技能应用大赛Java模拟题
  13. Java并发编程 基础知识学习总结
  14. 神器 Nginx 的学习手册(建议收藏吃灰)
  15. yy神曲url解析php_用PHP如何实现解析抖音无水印视频
  16. php如何自动阅卷,智能评卷系统 自动阅卷软件
  17. C#中ManualResetEvent用法总结
  18. 鸟哥私房菜重温笔记4
  19. python win32com 批量加密excel 新增sheet 调整sheet顺序
  20. 获取iOS设备唯一标示

热门文章

  1. 复数java实验_java实验 复数
  2. 优秀程序员的七大特征,你具备几条?
  3. 大学生金融职业生涯规划书
  4. MUI-创建子页面打开新页面
  5. 腾讯音乐知识图谱搜索实践
  6. Unity3D相机操控(完整模拟Scene视图操作)
  7. 解决nrm ls命令没有*(星号)的问题
  8. 【npm】npm发布测试(beta)版和正式版
  9. 禁止from disk cache
  10. OGM 与mongodb