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

LETTERS(dfs)

题目描述

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

输入格式

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

输出格式

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

样例输入

复制

3 6
HFDFFB
AJHGDH
DGAGEH

样例输出

复制

6

提示

零基础同学可以先学习视频课程,包含C/C++、Python、百练、蓝桥杯辅导、算法数据结构等课程,提供视频讲解以及配套习题,还有老师答疑,点击这里了解课程详情

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=21;
char a[N][N];
bool visited[N][N];
int count1=0;
int maxn=INT_MIN;
int next1[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
set<char>used;
void dfs(int x,int y,int count1)
{
    maxn=max(count1,maxn);
    for(int i=0;i<4;i++)
    {
        int tx=x+next1[i][0];
        int ty=y+next1[i][1];
        if(tx>=0&&ty>=0&&tx<=n-1&&ty<=m-1&&used.find(a[tx][ty]) == used.end())
        {
            if(visited[tx][ty]==false)
            {
                used.insert(a[tx][ty]);
                dfs(tx,ty,count1+1);
                used.erase(a[tx][ty]);
            
            }
        }
    }
}
int main ()
{
    cin>>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin>>a[i][j];
        }
    }
    used.insert(a[0][0]);
    dfs(0,0,1);
    cout<<maxn<<endl;
    return 0;
}


http://www.kler.cn/a/582307.html

相关文章:

  • Spring 的三种注入方式?
  • Vue3 + Spring Boot前后端分离项目跨域问题完整解决方案
  • C++编程:进阶阶段—4.2对象
  • Spring MVC 工作原理和流程
  • ubuntu中用docker下载opengauss
  • 大语言模型中Token的输出过程
  • git设置本地仓库和远程仓库
  • Linux第0节:Linux环境的搭建
  • 003-SpringCloud Alibaba-Nacos(配置中心)
  • 【redis】布隆过滤器的Java实现
  • leetcode日记(93)从中序与后序遍历序列构造二叉树
  • C 语言数据结构(三):栈和队列
  • 【3D视觉学习笔记1】针孔相机模型与坐标系变换
  • Linux进程管理15 - CFS调度器2 - 数据结构关系
  • c#25/3/11 周二
  • WHAT - 前端性能监控和错误追踪(Sentry 篇)
  • 【A2DP】蓝牙A2DP协议剖析:从架构到规范
  • 2025-03-11 学习记录--C/C++-PTA 习题11-5 指定位置输出字符串
  • 详细介绍c++中的文件处理
  • nginx 代理 redis