当前位置: 首页 > news >正文

【数据结构入门训练DAY-32】LETTERS

本文介绍了一个关于使用深度优先搜索(DFS)解决字母矩阵问题的训练内容。题目要求在一个R×S的大写字母矩阵中,从左上角开始移动,可以上下左右四个方向移动,但不能重复经过相同的字母,目标是找出最多能经过的不同字母数量。解题思路是通过DFS递归搜索矩阵中的每个字母,使用布尔数组标记已访问的字母,并在每个位置检查上下左右的字母是否未被访问过,继续递归搜索。文章还强调了在编码过程中if和else if语句的正确使用,以及严谨编码习惯的重要性。通过这次训练,不仅提升了解题思维,还加深了对编程细节的理解。

文章目录

  • 前言
  • 一、题目
  • 二、解题思路
  • 总结


前言

本次训练内容

  1. 训练DFS处理相同字母的问题。
  2. 对编码习惯的养成。
  3. 训练解题思维。

一、题目

给出一个roe×col的大写字母矩阵,一开始的位置为左上角,你可以向上下左右四个方向移动,并且不能移向曾经经过的字母。问最多可以经过几个字母。

输入格式

第一行,输入字母矩阵行数R和列数S,1≤R,S≤20。
接着输出RR行SS列字母矩阵。

输出格式

最多能走过的不同字母的个数。

样例输入

3 6
HFDFFB
AJHGDH
DGAGEH

样例输出

6

二、解题思路

        今天的题目,我的思路就是依次搜索回溯矩阵里的各个字母,如果遇到了新的字母就对其进行标记。我是使用bool来进行标记的,然后建立一个二维数组进行存储字母矩阵,再根据题意依次对当前字母位置的上下左右进行判断;具体代码实现如下:

#include <bits/stdc++.h>
using namespace std;
int R,S;
int sum=0;
char Array[26][26];
bool Check[10000];//标记处
void DFS(int x,int y,int k) {//定义的DFS函数
//处理逻辑if (x-1>0&&!Check[Array[x-1][y]]) {//上Check[Array[x-1][y]] = true;DFS(x-1,y,k+1);Check[Array[x-1][y]] = false;}if (y-1>0&&!Check[Array[x][y-1]]) {//左Check[Array[x][y-1]] = true;DFS(x,y-1,k+1);Check[Array[x][y-1]] = false;}if (x+1<=R&&!Check[Array[x+1][y]]) {//下Check[Array[x+1][y]] = true;DFS(x+1,y,k+1);Check[Array[x+1][y]] = false;}if (y+1<=S&&!Check[Array[x][y+1]]) {//右Check[Array[x][y+1]] = true;DFS(x,y+1,k+1);Check[Array[x][y+1]] = false;}sum=max(sum,k);//取最多的情况
}
int main() {cin>>R>>S;for (int i=1;i<=R;++i) {for (int j=1;j<=S;++j) {cin>>Array[i][j];}}Check[Array[1][1]] = true;//标记矩阵第一个字母DFS(1,1,1);cout<<sum;
}

注意if和else if的使用区别!!! 


总结

        今天的题目相对容易,我一下就明白了题目的意思,然后很快的进行逻辑编写,但是今天在if和else if的使用部分发生了问题,我以前一直觉得它俩都差不多,直到今天才深入了解到它俩区别很大。所以在训练的过程中,不仅是训练解题思维,也要养成严谨的编码习惯!

相关文章:

  • MySQL 8.0 OCP(1Z0-908)英文题库(21-30)
  • Pytorch常用统计和矩阵运算
  • c/c++爬虫总结
  • E9 泛微OA获取requestid
  • 【node】6 包与npm
  • MINIX 1.0 文件系统的实现(C/C++实现)
  • Kotlin跨平台Compose Multiplatform实战指南
  • 传导发射中的模拟手
  • BGP练习
  • openwrt目录结构(部分)
  • 深入理解目标检测中的关键指标及其计算方法
  • Mosaic数据增强技术
  • 构造+简单树状
  • Java 并发编程挑战:从原理到实战的深度剖析与解决方案
  • pnpm使用报错
  • https的发展历程
  • SpringBoot医院病房信息管理系统开发实现​
  • C++:公有,保护及私有继承
  • 字节开源FlowGram与n8n 技术选型
  • Next.js 知识框架总结
  • 中央结算公司:减免境外央行类机构账户开户费用
  • 18世纪“精于剪切、复制、粘贴”的美国新闻界
  • 历史地理学者成一农重回母校北京大学,担任历史系教授
  • 种罂粟喂鸡防病?四川广元一村民非法种植毒品原植物被罚​
  • 外交部发言人就印巴局势升级答记者问
  • 上海消防全面推行“检查码”,会同相关部门推行“综合查一次”