广度优先搜索:使用Python的最短路径

时间:2018-07-17 20:34:42

标签: python-3.x algorithm data-structures graph shortest-path

我在Hackerrank中遇到了问题Breadth First Search: Shortest Reach,这是我在python中的解决方案。但是,我的代码仅通过了7个测试用例。在此实现中,我在哪里错了?

#Hackerrank
#Topic : Graphs
#Url : https://www.hackerrank.com/challenges/bfsshortreach/problem

def bfs(i, n, E):

    level = [-1] * (n+1)
    queue = []
    level[i] = 0
    queue.append(i)

    while len(queue) > 0:
        head = queue[0]
        queue = queue[1:]
        for j,k in E:
            if j == head:
                if level[k] == -1:
                    level[k] = 1 + level[j]
                    queue.append(k)

    return level


q = int(input())
for case in range(q):
    e = input().split(" ")
    n = int(e[0])
    m = int(e[1])
    E = []

    for edge in range(m):
        e = input().split(" ")
        u = int(e[0])
        v = int(e[1])
        E.append([u,v])

    s = int(input())
    distance = bfs(s, n, E)
    dist = []
    for i in distance[1:]:
        if i > 0:
            dist.append(str(i*6))
        if i < 0:
            dist.append(str(-1))

    print(" ".join(dist))
    print("")

1 个答案:

答案 0 :(得分:1)

问题表明图形是无向的,但是您只需添加1条边就可以使其有向:

E.append([u,v])

您还应该添加另一条边缘

E.append([v,u])