ACM_1088滑雪(递归的简单应用)
2017-06-29 09:33
253 查看
Description(描述)
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
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
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。
Sample Input
5 5
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
Sample Output
25
我的逻辑:
1.找到最大的数字,遍历行找到到行最大,之后再对比每个行的最大数;
2.向上下左右四个方向找到比最大数小(第一个数据不存在比最大数小,但是之后的递归会用到,没有这个条件会变成无线递归)但是和这个数相差最小的数字,将这个数设置成最大数,进入递归;
3.递归的跳出条件为 (1)周围已经没有数字比递归传进来的这个数字要小;(2)进入死角,且周围没有数字比递归传进来的数字要小
4.规定一个静态变量(count),让其在递归内,每执行一次递归,count++,便可以得到最后的结果;
ps:这个代码的实现过程和扫雷的得到雷的信息的过程类似,都有一个递归的过程,这两个问题搞清楚任意一个,都可以解决另外一个问题;点此进入扫雷代码分享
具体代码如下:
Michael喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael想知道载一个区域中最长底滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。下面是一个例子
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
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子中,一条可滑行的滑坡为24-17-16-1。当然25-24-23-…-3-2-1更长。事实上,这是最长的一条。
Input
输入的第一行表示区域的行数R和列数C(1 <= R,C <= 100)。下面是R行,每行有C个整数,代表高度h,0<=h<=10000。
Output
输出最长区域的长度。
Sample Input
5 5
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
Sample Output
25
我的逻辑:
1.找到最大的数字,遍历行找到到行最大,之后再对比每个行的最大数;
2.向上下左右四个方向找到比最大数小(第一个数据不存在比最大数小,但是之后的递归会用到,没有这个条件会变成无线递归)但是和这个数相差最小的数字,将这个数设置成最大数,进入递归;
3.递归的跳出条件为 (1)周围已经没有数字比递归传进来的这个数字要小;(2)进入死角,且周围没有数字比递归传进来的数字要小
4.规定一个静态变量(count),让其在递归内,每执行一次递归,count++,便可以得到最后的结果;
ps:这个代码的实现过程和扫雷的得到雷的信息的过程类似,都有一个递归的过程,这两个问题搞清楚任意一个,都可以解决另外一个问题;点此进入扫雷代码分享
具体代码如下:
#include<stdio.h> int cal(int arr[100][100], int len, int col, int max, int maxlen, int maxcol) { static int output = 0; if (maxlen != 0 && maxlen != 99 && maxcol != 0 && maxlen != 99) { int a[5]; int i = 0; int tmp; int count = 0; a[0] = arr[maxlen - 1][maxcol]; a[1]= arr[maxlen + 1][maxcol]; a[2] = arr[maxlen][maxcol - 1]; a[3] = arr[maxlen][maxcol + 1]; a[4] = max; for (i = 3; i >= 0; i++) { int max1; max1 = a[4]; if (a[i] > max1) { tmp = a[i]; max1 = a[i]; a[i] = tmp; } } for (i = 0; i <= 3; i++) { if (a[i] == max&&i != 0) { if (a[i - 1] == arr[maxlen - 1][maxcol]) cal(arr, len, col, a[i - 1], maxlen - 1, maxcol); else if (a[i - 1] == arr[maxlen + 1][maxcol]) cal(arr, len, col, a[i - 1], maxlen + 1, maxcol); else if (a[i - 1] == arr[maxlen][maxcol + 1]) cal(arr, len, col, a[i - 1], maxlen, maxcol + 1); else if (a[i - 1] == arr[maxlen][maxcol - 1]) cal(arr, len, col, a[i - 1], maxlen, maxcol - 1); } else return output; } //确定max在abcd中的地位 ,找出比max小但是最接近的数,递归调用这个数,及其位置 //四个方向的比较 } if (maxlen == 0 && maxlen != 99 && maxcol != 0 && maxlen != 99) { //三个方向比较 下 左 右 } if (maxlen != 0 && maxlen == 99 && maxcol != 0 && maxlen != 99) { //三个方向比较 上 左 右 } if (maxlen != 0 && maxlen != 99 && maxcol == 0 && maxlen != 99) { //三个方向比较 上 下 右 } if (maxlen != 0 && maxlen != 99 && maxcol != 0 && maxlen == 99) { //三个方向比较 上下 左 } if (maxlen == 0 && maxlen != 99 && maxcol == 0 && maxlen != 99) { //三个方向比较 } if (maxlen == 0 && maxlen != 99 && maxcol != 0 && maxlen == 99) { //两个方向比较 边角元素 } } int main() { int arr[1000][1000]; //赋值 int len = 0, col = 0; int count = 0; scanf_s("%d%d", &len, &col); while (count != len) { int a = 0, b = 0; int max = arr[len][0]; int maxlen = 0, maxcol = 0; for (b = 0; b < len; b++) { for (a = 1; a < col; a++) { if (arr[len][b] > max) { max = arr[len][a]; maxlen = len; maxcol = col; } } }//寻找整个数据中最大数 //在最大数的四个方向寻找一个数字最接近最大数的数字 //计数器++ //边界访问问题 类似扫雷实现 //最后的结果必是一个数字不断减小的数组 } return 0; }
相关文章推荐
- PKU_ACM_1088 滑雪
- acm 1088 滑雪
- 北大ACM1088——滑雪~~DP
- 递归菜单简单应用
- poj1088 滑雪(简单dp)
- Pku acm 1088 滑雪 动态规划题目解题报告(十五)
- poj 1088 滑雪 简单的记忆化搜索/dp
- poj 1088 滑雪 动态规划 递归 带备忘
- 栈的简单应用 HDU 1022 http://acm.hdu.edu.cn/showproblem.php?pid=1022
- ACM学习历程16——List链表的应用之简单约瑟夫问题
- 递归的简单应用
- [ACM] poj 1088 滑雪 (记忆化搜索DFS)
- ZJU_BASIC LEVEL_1017 大数相除 递归的简单应用
- [ACM] poj 1088 滑雪 (内存搜索DFS)
- [ACM] POJ 1088 滑雪 (记忆化搜索复习)
- 滑雪-PKU ACM 1088
- ACM学习-POJ-1088-滑雪
- ACM练级日志:POJ 2318 叉积的简单应用
- 简单的递归应用
- Poj 1088 滑雪 (简单DP + 记忆化搜索)