#include <iostream> #include "vector" using namespace std; //全局变量,最高可爬楼梯 int max_floor = 0; /** * kkmd66 四刷 * @param map * @param i * @param j * @param count */ void find(const vector<vector<int>> &map, int i, int j, int count) { //向左找 if (map[i][j - 1] > map[i][j]) find(map, i, j - 1, count + 1); //向右找 if (map[i][j + 1] > map[i][j]) find(map, i, j + 1, count + 1); //想上找 if (map[i - 1][j] > map[i][j]) find(map, i - 1, j, count + 1); //向下找 if (map[i + 1][j] > map[i][j]) find(map, i + 1, j, count + 1); //与上一次比较 if (count > max_floor) max_floor = count; } /** * kkmd66 四刷 * @return */ int main() { int n, m; while (cin >> n >> m) { //每组数据重置 max_floor = 0; //存储,并且在图周围一圈加上一层保护 vector<vector<int>> map(n + 2); for (int i = 0; i <= n + 1; ++i) { //第一行与最后一行置零,防止边界调用find出错 if (i == 0 || i == n + 1) { for (int q = 0; q <= m + 1; ++q) { map[i].push_back(0); } } //输入数据 else { for (int j = 0; j <= m + 1; ++j) { //第一列与最后一列置零,防止边界调用find出错 if (j == 0 || j == m + 1) { map[i].push_back(0); } //输入数据 else { int temp; cin >> temp; map[i].push_back(temp); } } } } //依次遍历每层可以到达的最大层 for (int i = 1; i < n + 1; ++i) { for (int j = 1; j < m + 1; ++j) { find(map, i, j, 0); } } //输出 cout << max_floor << endl; } return 0; } |
Double click to view unformatted code.