解题思路:
注意事项:
参考代码:
#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 人评分