首页 > 编程语言 >华为od python

华为od python

时间:2024-04-26 20:24:12浏览次数:34  
标签:src od python energy initial newX 华为 newY remaining

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())

 

标签:src,od,python,energy,initial,newX,华为,newY,remaining
From: https://www.cnblogs.com/hshy/p/18160795

相关文章

  • 第四章:Total Store Order and the x86 Memory Model
    chapter4:TSO于X86内存模型1、为什么需要TSO/x86处理器内核长期以来使用writebuffer来保存已提交的store指令,直到内存系统可以处理这些store请求。当store指令提交时,store请求进入writebuffer,而当需要写入的缓存行在内存系统中可以保证缓存一致性时,store请求就退出writebuffer......
  • 利用python将沪深300股票历史数据存储在sqlite3
    一、环境准备1、python3中自带了sqlite3参考https://www.runoob.com/sqlite/sqlite-tutorial.html2、在sqlite中建表CREATETABLE[stock]([id]NVARCHAR(48),[name]NVARCHAR(24), [code]NVARCHAR(24),[date]INTEGERNOTNULL,[open]REAL,[close]......
  • C# Modbut TCP 读写
    一、封装基本连接、读写。读写 ReadHoldingRegisters,当前有四种方案,现在只使用 ReadHoldingRegistersint类型,需要其他方案自行新增。publicclassModbusClient{privateTcpClient?tcpClient;privateIModbusMaster?modbusMaster;......
  • SystemVerilog -- 6.3 Interface ~ Modports
    在接口中定义带有方向的modport列表,以对模块内的接口访问施加某些限制。关键字指示方向的声明方式与模块内部一样。Syntaxmodport[identifer](input[port_list],output[port_list]);下面显示的是接口myInterface的定义,它有几个信号和两个声明。modportdut0本......
  • mongodb异机做时间点恢复(异机建议部署免密登录)
    环境:OS:Centos7DB:mongodb5原环境:1主2从,异机恢复的环境:单机(oplog.rs是否开启都可以,开启可以参考:https://www.cnblogs.com/hxlasky/p/17979922) 1.查看当前的表数据情况myrepl:PRIMARY>usedb_pushmsg;switchedtodbdb_pushmsgmyrepl:PRIMARY>showtables;app......
  • 1.关于Modbus TCP/RTU协议
    一、上位机C#与PLC通信1.通常情况下,需要与 PLC 工程师进行对接,并根据其编写的 PLC 程序去读写指定的寄存器。(PLC工程师提供地址表,然后C#通过Modbus读写寄存器或线圈开关)2.PLC 工程师负责编写 PLC 控制程序,其中定义了各个寄存器的功能和用途,以及与外部设备的交互逻辑。因此......
  • Node.js Express 框架(2)
    1.读取文件并返回给客户端res.sendFile(path):读取文件并返回给客户端,适合静态页面app.get("/",function(req,res){res.sendFile(path.join(__dirname,"index.html"))})res.render(path,data):读取文件,配合模版引擎可以将数据渲染到文件中并返回给客户端,适合动态页面......
  • 代码报错不用愁,CodeGeeX一键完成代码修复、错误解释的功能上线了!
    作为一名开发者,你一定遇到过在编写代码时出现的各种错误。这些错误可能是语法错误、运行时错误或者逻辑错误。处理这些错误通常需要花费大量的时间和精力,特别是当你对错误的原因一无所知时。CodeGeeX的v2.7.4版本最新上线的代码修复和错误解释功能,让你在解决代码错误的问题上,变得......
  • 【python】记录一次python发送json数据到go服务端,服务端解析失败问题
    【python】记录一次python发送json数据到go服务端,服务端解析失败问题背景:在做性能测试时,python把采集到的性能数据通过post回传到服务端,服务端用go实现,服务端是将接收的json通过json.Unmarshal反序列化为对应的结构体,但在实现时一直提示数据类型错误的问题问题代码python发送请......
  • python - [11] 日常脚本汇总
    题记部分  一、updatetime更新将脚本放到目标文件夹,运行脚本可将文件夹下所有文件的更新时间都修改为当前时间。importos#指定目录路径directory_path="./"#遍历目录下的所有文件和子目录forroot,dirs,filesinos.walk(directory_path):forfilei......