python实现深度优先搜索

深度优先搜索是个经典算法,具体内容就不赘述了网上有很多,这个博客讲的就挺好传送门

通过具体题目来实现深度优先搜索,这道题是美团点评2019春招笔试题,是一道典型的深度优先搜索题。

题目描述

小团在一次星际旅行中,耗尽了飞船的能量,迷失在了空间魔方中,空间魔方中有N*N*N个能量粒子,美团云AI迅速帮小团分析出了空间魔方的能量分布图。

已知小团的飞船被困在能量值的最高的点,能量值最高点有且只有一个,飞船每到达一个能量粒子就会吸收对应粒子的能量,该粒子就会吸收对应粒子的能量,该粒子会坍塌成小黑洞,飞船不可到达。小团驾驶的飞船只能从高能量粒子驶向低能粒子,且每次只能从6个方向中选择一个前进(±x,±y,±z)。

请帮助小团算出小团吸收最高的能量值。

输入

N(0≤N≤8)

N*N*N行空间能量数据,格式为:X Y Z P,XYZ表示点坐标,P表示空间能量分布(0≤P)

输出

可吸收到的最高的能量值

样例输入

2
0 0 0 7
0 0 1 2
0 1 0 4
0 1 1 3
1 0 0 6
1 0 1 1
1 1 0 5
1 1 1 0

样例输出

28

python解题代码

# -*- coding: utf-8 -*-
"""
Created on Wed Apr 24 09:41:08 2019

@author: zjn
"""
import numpy as np

def dfs(x, y, z, total_ennergy):
    
    global book
    global m
    global max_energy
    global N
    next_step = np.array([[0, 0, 1], [0, 0, -1],
                          [0, 1, 0], [0, -1, 0],
                          [1, 0, 0], [-1, 0, 0]]) 
    
    if total_ennergy > max_energy:
        max_energy = total_ennergy
            
    for j in range(6):
        tx = x + next_step[j, 0]
        ty = y + next_step[j, 1]
        tz = z + next_step[j, 2]
        if tx > N-1 or tx < 0 or ty > N-1 or ty < 0 or tz > N-1 or tz < 0:
            continue
        if m[x, y, z] > m[tx, ty, tz] and book[tx, ty, tz] == 0:
            book[tx, ty, tz] = 1
            dfs(tx, ty, tz, total_ennergy + m[tx, ty, tz])
            book[tx, ty, tz] = 0
        
N = int(input())
m = np.zeros((N, N, N))
book = np.zeros((N, N, N))
max_energy = 0
for i in range(N**3):
    l = list(map(lambda x:int(x),list(input().split(' '))))
    m[l[0], l[1], l[2]] = l[3]
max_index = np.where(m==np.max(m))
max_x = max_index[0][0]
max_y = max_index[1][0]
max_z = max_index[2][0]
book[max_x, max_y, max_z] = 1
dfs(max_x, max_y, max_z, np.max(m))
print(max_energy)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值