题目:香蕉采摘(一听就有种花生采摘的感觉,但是,不是[奸笑])
小明有一只宠物猴,名叫小圣。这天,他们正沿着乡间小路散步,突然发现了一片香蕉林,小明和小圣都非常的高兴,因为他们最爱香蕉。香蕉树整齐的排列着,形成了一个R行C列的网格,网格的每个格子里面有一棵香蕉树,小明一眼就能看出每棵树上有多少个香蕉,为了训练小圣的数学,小明吩咐小圣去采摘香蕉并要求它:
你从第一行第一列出发,也是就是(1,1)的位置开始,每次往上下左右四个方向去找相邻的一棵树,这个树要是没有被采摘过的而且这棵树上的香蕉要是这四个方向中数量最多的(保证每次只能找到唯一一棵这样的树),然后进行采摘。按照这样的方法,最终小圣总是会在(R,C)处停止然后采摘掉那里的香蕉。
现在给定网格的大小,以及每个格子里香蕉的数量,请你计算一下最终小圣一共采摘了多少香蕉。(又是考试题[汗])
输入格式
第一行 两个整数R C,分别表示香蕉林网格的总行数和总列数,1≤R≤40,1≤C≤40
接下来R行,每行C个整数,分别表示网络中每个格子里的一棵香蕉树上香蕉的个数,每棵香蕉树上香蕉的个数是1到100之间的整数
输出格式
一个整数,表示猴子小圣按照小科吩咐的移动方法最终到达(R,C)处一共采摘的香蕉的总数
输入输出样列
输入样例1:
3 4
3 3 4 5
4 5 3 2
1 7 4 2
输出样例1:
39
分析一下数据:
3 4
3 3 4 5
4 5 3 2
1 7 4 2
思路:从(1,1)的位置开始,每次都相当前各自的上、下、左、右四个方向去遍历找到最大的一个数。
上: (x,y-1) 下: (x,y+1) 左: (x-1,y) 右: (x+1,y)
什么时候到达终点?
X=R && Y=C时达到终点,也就是X!=R|| Y!=C时 循环执行。(如果打两个等号会被标黄,你们注意一下哈!)
注意每采摘完一棵树,要把数量清零,避免被重复采摘。
定义.上下左右四个方向
dir[1]表示向右
dir[1][0]=1表示横向增加1
dir[1][1]=0表示纵向增加0
dir[2]表示向左
dir[2][0]=-1表示横向减少1
dir[2][1]=0表示纵向增加0
dir[3]表示向下
dir[3][0]=0表示横向增加0
dir[3][1]=1表示纵向增加1
dir[4]表示向上
dir[4][0]=0表示横向增加0
dir[4][1]=-1表示纵向减少1
#include<bits/stdc++.h>
using namespace std;
const int dir