我从hackerearth (link to problem)尝试了这种广度优先的搜索实践问题。我的代码通过了示例测试用例。但是,关于提交测试用例,我缺少一些东西。
我通过我编写的文档距离程序(用于首次提交输入)运行“我的输出”和“测试输出”,发现该距离为〜0.52(deg)[0 deg表示文档完全相同,并且90度表示文档完全不同]。这样做只是为了大致衡量我的错误程度。我需要帮助才能找到我无法在代码中说明的情况。
问题描述:
在社交网站中,人们与其他人保持联系。整个系统显示为巨大的连接图。在此问题中,您需要回答在t个节点彼此相距不远的情况下连接的总人数(t距离连通性)。例如:两个直接连接的人之间的距离为1。虽然两个人有共同的接触但没有直接的连通性,但他们之间的距离却是2。
输入行的第一行包含两个整数n和e,其中n是节点,e是边。下一条e行将包含两个整数u和v,这意味着节点u和节点v以无向方式彼此连接。下一行包含单个整数m,即查询数。接下来的m行中,每行都有两个输入,一个作为源节点,另一个作为必需的t距离连接,应用于处理查询。
注意:节点索引将从0开始。所示的示例和测试用例是基于1的索引。要提交解决方案,请使用基于0的索引。
示例输入:
9 10
1 2
2 3
1 7
2 4
3 4
4 7
7 8
9 7
7 6
5 6
3
4 2
5 3
2 1
输出:
4
4
3
说明 创建图表后,有3个查询,
i。源节点:4,我们必须找出与节点4相距2的节点总数。 1(4-> 2-> 1),8(4-> 7-> 8),9(4-> 7-> 9),6(4-> 7-> 6)= 4
ii。与上述类似
iii。源节点:2,我们必须找出与节点2相距1的节点总数。 1(2-> 1),4(2-> 4),3(2-> 3)= 3
#social network bfs algorithm
from collections import deque
graph = {}
queries = []
def accept_values():
#accept number of vertices and edges
vertex_edge = [int(i) for i in input().strip().split(" ")]
#accept the edges for the undirected graph
for i in range(vertex_edge[1]):
edge = [int(i) for i in input().strip().split(" ")]
try:
graph[edge[0]].append(edge[1])
except:
graph[edge[0]] = [edge[1]]
try:
graph[edge[1]].append(edge[0])
except:
graph[edge[1]] = [edge[0]]
#accepting the number of queries and the queries themselves
number_of_queries = int(input())
for i in range(number_of_queries):
queries.append([int(i) for i in input().strip().split(" ")])
#applying bfs on the (source, required distance) queries
for query in queries:
bfs(query)
def bfs(query):
counter = 0
q = deque()
q.append(query[0])
visited = {query[0] : True}
distance = {query[0] : 0}
while q:
popped = q.popleft()
for neighbour in graph[popped]:
if neighbour not in visited:
visited[neighbour] = True
#stop looking further because we have all the nodes at the required distance, i think
if distance[popped] + 1 > query[1]:
for key in distance:
if distance[key] == query[1]:
counter +=1
print(counter)
return
#keep going until we reach the required query distance
else:
distance[neighbour] = distance[popped] + 1
q.append(neighbour)
#prints 0 if there are no such nodes
print(counter)
#calling function to accept values as per required format
accept_values()