袁愈权


私信TA

用户名:dotcpp0787148

访问量:757

签 名:

网工和电子的同学们 万事如意 祝你们也祝我

等  级
排  名 338
经  验 5371
参赛次数 4
文章发表 80
年  龄 19
在职情况 学生
学  校 贺州学院
专  业 网络工程

  自我简介:

雨吗,可惜洗刷不了那些污秽的心

解题思路:

注意事项:

参考代码:

#include"bits/stdc++.h"
using namespace std;
// 定义全局变量r和s,kkk初始化为-1
int r, s, kkk = -1;
// 定义字符数组f用于存储输入的矩阵
char f[21][21];
// 定义布尔数组lll用于标记字符是否被访问过
bool lll[200];
void dfs(int x, int y, int sum) {
    // 如果上方有未访问过的字符,则递归调用dfs
    if (x - 1 > 0 && !lll[f[x - 1][y]]) {
        lll[f[x - 1][y]] = 1; // 标记该字符已访问
        dfs(x - 1, y, sum + 1); // 递归调用dfs
        lll[f[x - 1][y]] = 0; // 回溯,取消标记
    }
    // 如果左侧有未访问过的字符,则递归调用dfs
    if (y - 1 > 0 && !lll[f[x][y - 1]]) {
        lll[f[x][y - 1]] = 1; // 标记该字符已访问
        dfs(x, y - 1, sum + 1); // 递归调用dfs
        lll[f[x][y - 1]] = 0; // 回溯,取消标记
    }
    // 如果下方有未访问过的字符,则递归调用dfs
    if (x + 1 <= r && !lll[f[x + 1][y]]) {
        lll[f[x + 1][y]] = 1; // 标记该字符已访问
        dfs(x + 1, y, sum + 1); // 递归调用dfs
        lll[f[x + 1][y]] = 0; // 回溯,取消标记
    }
    // 如果右侧有未访问过的字符,则递归调用dfs
    if (y + 1 <= s && !lll[f[x][y + 1]]) {
        lll[f[x][y + 1]] = 1; // 标记该字符已访问
        dfs(x, y + 1, sum + 1); // 递归调用dfs
        lll[f[x][y + 1]] = 0; // 回溯,取消标记
    }
    // 更新最大路径长度
    kkk = max(kkk, sum);
}
int main() {
    // 读取矩阵的行数和列数
    cin >> r >> s;
    // 读取矩阵内容
    for (int i = 1; i <= r; i++) {
        for (int j = 1; j <= s; j++) {
            cin >> f[i][j];
        }
    }
    // 标记起始点字符已访问
    lll[f[1][1]] = 1;
    // 从起始点开始进行深度优先搜索
    dfs(1, 1, 1);
    // 输出最大路径长度
    cout << kkk << endl;
    return 0;
}


 

0.0分

0 人评分

新上线《蓝桥杯辅导》课程,近五年的蓝桥杯省赛与国赛真题都有,从读题开始理解题意、梳理思路、实现代码再提交评测全过程,可有效提升获奖比例甚至进国赛!课程介绍、试听请猛击这里

  评论区

  • «
  • »