华为od python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | import sys rows = 4 cols = 4 matrix = [[ 0 , 1 , 1 , 1 ], [ 30 , 30 , - 1 , 40 ],[ 0 , 20 , 20 , 40 ],[ 10 , - 1 , 30 , 40 ]] offsets = (( - 1 , 0 ), ( 1 , 0 ), ( 0 , - 1 ), ( 0 , 1 )) class Node: def __init__( self , x, y): self .x = x self .y = y self .initial_energy = 0 self .remaining_energy = 0 self .has_energy_booster = False def bfs(): if matrix[ 0 ][ 0 ] = = 0 or matrix[rows - 1 ][cols - 1 ] = = 0 : return - 1 queue = [] src = Node( 0 , 0 ) if matrix[ 0 ][ 0 ] = = - 1 : src.initial_energy = 0 src.remaining_energy = 100 src.has_energy_booster = True else : src.initial_energy = matrix[ 0 ][ 0 ] src.remaining_energy = 0 src.has_energy_booster = False queue.append(src) distance_from_start = [[sys.maxsize] * cols for _ in range (rows)] remaining_energy_at_destination = [[ 0 ] * cols for _ in range (rows)] distance_from_start[ 0 ][ 0 ] = src.initial_energy remaining_energy_at_destination[ 0 ][ 0 ] = src.remaining_energy while len (queue) > 0 : cur = queue.pop( 0 ) for offsetX, offsetY in offsets: newX = cur.x + offsetX newY = cur.y + offsetY if newX < 0 or newX > = rows or newY < 0 or newY > = cols or matrix[newX][newY] = = 0 : continue initial_energy = cur.initial_energy remaining_energy = cur.remaining_energy has_energy_booster = cur.has_energy_booster if matrix[newX][newY] = = - 1 : remaining_energy = 100 has_energy_booster = True else : remaining_energy - = matrix[newX][newY] if remaining_energy < 0 : if has_energy_booster: continue else : initial_energy - = remaining_energy remaining_energy = 0 if initial_energy > 100 : continue if initial_energy > distance_from_start[newX][newY]: continue if initial_energy < distance_from_start[newX][newY] or remaining_energy > \ remaining_energy_at_destination[newX][newY]: distance_from_start[newX][newY] = initial_energy remaining_energy_at_destination[newX][newY] = remaining_energy nxt = Node(newX, newY) nxt.initial_energy = initial_energy nxt.remaining_energy = remaining_energy nxt.has_energy_booster = has_energy_booster queue.append(nxt) if distance_from_start[rows - 1 ][cols - 1 ] = = sys.maxsize: return - 1 else : return distance_from_start[rows - 1 ][cols - 1 ] print (bfs()) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2023-04-26 EXPORT_SYMBOL宏
2021-04-26 $(SolutionDir)
2021-04-26 WDK和 windows sdk
2021-04-26 通过本机winDbg来调试虚拟机中的驱动
2021-04-26 从windows内核开发理解windows的一些程序
2020-04-26 windows sdk 7.1
2020-04-26 m_db=NULL