4 5
o o o o o
o x x x o
o o o x o
o x o o o
// 引入vector头文件
#include
#include
#include
using namespace std;
// 定义一个函数walk,表示从(x, y)位置开始走,返回最大步数
int walk(vector<vector<char>> &arr, int n, int m, int x, int y, int count, int max) {
// 如果越界或者不能走,直接返回
if (x < 0 || x >= n || y < 0 || y >= m || arr[x][y] == 'x') {
return count;
}
// 否则,标记为已走过
arr[x][y] = 'x';
// 向上走一步
int up = walk(arr, n, m, x - 1, y, count + 1, max);
// 向下走一步
int down = walk(arr, n, m, x + 1, y, count + 1, max);
// 取两者的较大值作为新的最大步数 max = max(up, down);
// 回溯到上一步
arr[x][y] = 'o';
max = up > down ? up : down;
// 返回最大步数
return max;
}
// 主函数
int main() {
// 输入行数和列数
freopen("test.txt", "r", stdin);
int n, m;
cin >> n >> m;
// 创建一个二维字符型数组
vector<vector<char>> arr(n, vector<char>(m));
// 输入数组元素
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
cin >> arr[i][j];
}
}
// 初始化最大步数为0
int ans = 0;
// 遍历所有位置,调用walk函数,更新最大步数
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
ans = max(ans, walk(arr, n, m, i, j, 0, ans));
}
}
// 输出最大步数
cout << ans << endl;
}