#include<iostream> using namespace std; int k = 0;//用于记录最长步数 void func(int **arr, int i, int j, int n, int m, int temp)//递归遍历所有可能爬到的顶点 { if (i > 0) //上 if (arr[i][j] < arr[i - 1][j]) func(arr, i - 1, j, n, m, temp + 1); if (i < n - 1) //下 if (arr[i][j] < arr[i + 1][j]) func(arr, i + 1, j, n, m, temp + 1); if (j > 0) //左 if (arr[i][j] < arr[i][j - 1]) func(arr, i, j - 1, n, m, temp + 1); if (j < m - 1) //右 if (arr[i][j] < arr[i][j + 1]) func(arr, i, j + 1, n, m, temp + 1); if (temp > k)//若当前所爬步数大于已记录的最长步数,则更新最长步数 k = temp; } int main() { int n, m; while (cin >> n >> m) { int **arr = new int*[n]; for (int i = 0; i < n; i++) { arr[i] = new int[m]; for (int j = 0; j < m; j++) cin >> arr[i][j]; } for (int i = 0; i < n; i++)//二层for循环,从任意顶点出发开始爬楼梯 for (int j = 0; j < m; j++) func(arr, i, j, n, m, 0);//从i,j出发 cout << k << endl; k = 0; } return 0; } |
Double click to view unformatted code.