度小满4.20笔试第二题城市旅行最小价值BFS

考试的时候忘了一个细节导致一个用例都没过,最后没时间了,考完试才发现忘了题目的下标值不是从0开始的,修改完是可以通过用例的,不知道这样做思路是否正确,有没有大佬指导下?

import sys
from collections import deque


def parse_nums(nums_str):
    return [int(x) for x in nums_str.strip().split()]


def bfs(cs, a, b, c):
    target = len(cs) - 1
    visited = [False] * len(cs)
    queue = deque()
    queue.append((0, 0))
    visited[0] = True
    direcitions = [(0, a), (1, a + c), (-1, a + b)]
    while queue:
        x, t = queue.popleft()
        for d in direcitions:
            nx, nt = cs[x] + d[0], t + d[1]
            if 0 <= nx < len(cs) and not visited[nx]:
                if nx == target:
                    return nt
                queue.append((nx, nt))
                visited[nx] = True
    return -1


for line in sys.stdin:
    n, a, b, c = parse_nums(line)
    cs = parse_nums(input())
    # 忘了写这两行啊啊啊啊
    for i in range(len(cs)):
        cs[i] -= 1
    print(bfs(cs, a, b, c))  # 答案4
#度小满笔试##度小满##笔试题目#
全部评论
我做的是回溯法 提交的时候忘记剪枝了
点赞 回复 分享
发布于 2020-04-21 10:19
我的做法是每一个点记录第一个点到其的位置最小花费,如果直接能从第一个点到达,花费就是a,如果不行,就算通过前面那些位置到他最小花费,记录下来。只过了65
点赞 回复 分享
发布于 2020-04-20 21:08
bfs可以保证第一次搜索到的是最小的
点赞 回复 分享
发布于 2020-04-20 19:15
我一开始也觉得是bfs,但又觉得bfs不能保证最优解,不知道想的对不对
点赞 回复 分享
发布于 2020-04-20 17:59

相关推荐

xiaolihuam...:当然还有一种情况是你多次一面挂,并且挂的原因都比较类似,例如每次都是算法题写不出来。面试官给你的评价大概率是算法能力有待加强,算法能力有待提高,基础知识掌握的不错,项目过关,但是coding要加强。短期内高强度面试并且每次都是因为同样的原因挂(这个你自己肯定很清楚),会形成刻板印象,因为你偶尔一次算法写不出来,面试官自己也能理解,因为他清楚的知道自己出去面试也不一定每一次面试算法都能写出来。但是连续几次他发现你的面屏里面都是算法有问题,他就认为这不是运气问题,而是能力问题,这种就是很客观的评价形成了刻白印象,所以你要保证自己。至少不能连续几次面试犯同样的错。算法这个东西比较难保证,但是有些东西是可以的,例如某一轮你挂的时候是因为数据库的索引,这个知识点答的不好,那你就要把数据库整体系统性的复习,下一轮面试你可以,项目打的不好,可以消息队列答的不好,但是绝对不可以数据库再答的不好了。当然事实上对于任何面试都应该这样查漏补缺,只是对于字节来说这个格外重要,有些面试官真的会问之前面试官问过的问题
点赞 评论 收藏
分享
程序员小白条:这比例牛逼,750:1
点赞 评论 收藏
分享
评论
1
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务