华为笔试题2019年4月10日第三题(地图海拔路径数量)

# -*- coding: utf-8 -*-
"""
Created on Thu Apr 11 09:02:20 2019

@author: CommissarMa
华为笔试题2019年4月10日第三题
题目:一张N*M的地图上每个点的海拔高度不同;从当前点只能访问上、下、左、右四个点中还没有到达过的点,
且下一步选择的点的海拔高度必须高于当前点;求从地图中的点A到点B总的路径条数除以10^9的余数。
地图上左上角坐标为(0,0),右下角坐标为(N-1,M-1)。
"""

"""
深度优先遍历DPS
"""

#输入:
N=4
M=5
height=[
        [0,1,0,0,0],
        [0,2,3,0,0],
        [0,0,4,5,0],
        [0,0,7,6,0]
        ]
start_i=0
start_j=1
target_i=3
target_j=2

total_count=0#总路径数
visited=[[0 for i in range(0,M)] for j in range(0,N)]#访问过的点置1
def dps(cur_i,cur_j,target_i,target_j,visited,height):
    visited[cur_i][cur_j]=1
    if cur_i==target_i and cur_j==target_j:
        global total_count
        total_count+=1
        return
    if 0<=cur_j-1<M and height[cur_i][cur_j-1]>height[cur_i][cur_j] and visited[cur_i][cur_j-1]==0:
        dps(cur_i,cur_j-1,target_i,target_j,visited,height)#左边
        visited[cur_i][cur_j-1]=0
    if 0<=cur_i-1<N and height[cur_i-1][cur_j]>height[cur_i][cur_j] and visited[cur_i-1][cur_j]==0:
        dps(cur_i-1,cur_j,target_i,target_j,visited,height)#上边
        visited[cur_i-1][cur_j]=0
    if 0<=cur_j+1<M and height[cur_i][cur_j+1]>height[cur_i][cur_j] and visited[cur_i][cur_j+1]==0:
        dps(cur_i,cur_j+1,target_i,target_j,visited,height)#右边
        visited[cur_i][cur_j+1]=0
    if 0<=cur_i+1<N and height[cur_i+1][cur_j]>height[cur_i][cur_j] and visited[cur_i+1][cur_j]==0:
        dps(cur_i+1,cur_j,target_i,target_j,visited,height)#下边
        visited[cur_i+1][cur_j]=0
    return

dps(start_i,start_j,target_i,target_j,visited,height)
print(total_count)
    

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值