华为 4.10 第三题 求解

import java.util.*;
public class Main3{

public static int f(int[][] arr,int n,int m,int x,int y,int z,int w) {
int a=0,b=0,c=0,d=0;
if(x==z&&y==w) {
return 1;
}
if(x-1>=0&&arr[x-1][y]>arr[x][y]) {
a=f(arr,n,m,x-1,y,z,w);
}
if(x+1<=n-1&&arr[x+1][y]>arr[x][y]) {
b=f(arr,n,m,x+1,y,z,w);
}
if(y-1>=0&&arr[x][y-1]>arr[x][y]) {
c=f(arr,n,m,x,y-1,z,w);
}
if(y+1<=m-1&&arr[x][y+1]>arr[x][y]) {
d=f(arr,n,m,x,y+1,z,w);
}
return a+b+c+d;
}


public static void main(String[] args){
Scanner in =new Scanner(System.in);
while(in.hasNext()){
int n=in.nextInt();
int m=in.nextInt();
int[][] arr=new int[n][m];
for(int i=0;i<n;i++) {
for(int j=0;j<m;j++) {
arr[i][j]=in.nextInt();
}
}
int x=in.nextInt();
int y=in.nextInt();
int z=in.nextInt();
int w=in.nextInt();
System.out.println(f(arr,n,m,x,y,z,w));
}
}
}
#华为##笔试题目#
全部评论
暴力递归过了0.36,想不出优化的办法
点赞 回复 分享
发布于 2019-04-10 22:27
def helper(x,y,hb,z,w,debug=False):     ans1=ans2=ans3=ans4=0     if x+1<len(hb) and hb[x+1][y]>hb[x][y]:         if debug:print(x+1,y)         if x+1==z and y==w:return 1         ans1 = helper(x+1,y,hb,z,w,debug)     if x-1>=0 and hb[x-1][y]>hb[x][y]:         if debug:print(x-1,y)         if x-1==z and y==w:return 1         ans2 = helper(x-1,y,hb,z,w,debug)     if y+1<len(hb[0]) and hb[x][y+1]>hb[x][y]:         if debug:print(x,y+1)         if x==z and y+1==w:return 1         ans3 = helper(x,y+1,hb,z,w,debug)     if y-1>=0 and hb[x][y-1]>hb[x][y]:         if debug:print(x,y-1)         if x==z and y-1==w:return 1         ans4 = helper(x,y-1,hb,z,w,debug)     return ans1+ans2+ans3+ans4 def solution():     N,M = 6,5     hb = [[0,1,0,0,0],[0,2,3,0,0],[0,0,4,5,6],[0,0,19,8,7],[0,0,20,9,0],[0,0,0,10,0]]     x,y,z,w = 0,1,5,3 #     N,M = 5,5 #     hb = [[0,1,0,0,0],[0,2,3,0,0],[0,0,4,5,6],[0,0,9,8,7],[0,0,10,0,0]] #     x,y,z,w = 0,1,4,2          flag = [[0 for i in range(len(hb[0]))] for j in range(len(hb))]     flag[x][y]=1     output = helper(x,y,hb,z,w,debug=False)     print(output%1000000000) solution()
点赞 回复 分享
发布于 2019-04-11 10:20

相关推荐

牛客146600443号:92的能看上这3k,5k在搞笑呢
点赞 评论 收藏
分享
勤奋努力的椰子这就开摆:美团骑手在美团工作没毛病
投递美团等公司10个岗位
点赞 评论 收藏
分享
ArisRobert:统一解释一下,第4点的意思是,公司按需通知员工,没被通知到的员工是没法去上班的,所以只要没被通知到,就自动离职。就是一种比较抽象的裁员。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务