草原坝上滑梯

来源:互联网 发布:java实现发送短信 编辑:程序博客网 时间:2024/04/28 19:22

草原坝上滑梯
只能从上下左右侧移动
输入:行数R 列数C
输出:最长区域的长度
样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
输出:25

#include <iostream>#include <algorithm>using namespace std;int r;//行int c;//列int a[1000][100];//输入矩阵int result[1000][1000];//输出矩阵//递归思想:分别求出上下左右方向的最大长度int maxLength(int  i, int j){    int left = j - 1;    int right = j + 1;    int high = i - 1;    int low = i + 1;    int left_value;    int right_value;    int high_value;    int low_value;    //左侧最大长度    if (left >= 0 && a[i][left] < a[i][j])        left_value = maxLength(i, left) + 1;    else        left_value = 0;    //右侧最大长度    if (right <= c - 1 && a[i][right] < a[i][j])        right_value = maxLength(i, right) + 1;    else        right_value = 0;    //上侧最大长度    if (high >= 0 && a[high][j] < a[i][j])        high_value = maxLength(high, j) + 1;    else        high_value = 0;    //下侧最大长度    if (low <= r - 1 && a[low][j] < a[i][j])        low_value = maxLength(low, j) + 1;    else        low_value = 0;    int max1 = max(high_value, low_value);    int max2 = max(left_value, right_value);    return max(max1, max2);}int main(){    while (cin >> r >> c)    {        //初始化矩阵        for (int i = 0; i < r; i++)            for (int j = 0; j < c; j++)                cin >> a[i][j];        //计算每一个位置的最大长度        for (int i = 0; i < r; i++)            for (int j = 0; j < c; j++)                result[i][j] = maxLength(i, j);        //寻找所有位置中最大的长度        int maxLen = 0;        for (int i = 0; i < r; i++)        {            for (int j = 0; j < c; j++)                if (result[i][j] > maxLen)                    maxLen = result[i][j];        }        cout << maxLen + 1 << endl;    }    system("pause");    return 0;}
0 0