Pagini recente » Borderou de evaluare (job #185308) | Cod sursa (job #2797517)
from collections import deque
adj_list = {}
my_list = []
def add_node(node):
if node not in my_list:
my_list.append(node)
def add_edge(node1, node2, my_graph):
temp = []
if node1 in my_list and node2 in my_list:
if node1 not in my_graph:
temp.append(node2)
my_graph[node1] = temp
elif node1 in my_graph:
temp.extend(my_graph[node1])
temp.append(node2)
my_graph[node1] = temp
def read():
n, m, s = [int(x) for x in f.readline().split()]
for i in range(1, n + 1):
add_node(i)
for i in range(m):
x, y = [int(z) for z in f.readline().split()]
if x in adj_list:
if y not in adj_list[x]:
add_edge(x, y, adj_list)
else:
add_edge(x, y, adj_list)
return n, m, s
def bfs(my_graph, starting_node):
distance = {}
for node in my_graph:
distance[node] = -1
distance[starting_node] = 0
path = 0
queue, result, visited = [starting_node], [starting_node], []
while queue:
node = queue.pop(0)
visited.append(node)
aux = []
for n in my_graph[node]:
if n not in visited:
queue.append(n)
aux.append(n)
if aux:
path += 1
for node0 in aux:
distance[node0] = path
if node0 not in result:
result.append(node0)
return distance
f = open("bfs.in", "r")
f_out = open("bfs.out", "w")
N, M, S = read()
bfs_result = bfs(adj_list, S)
sorted_items = sorted(bfs_result.items())
for x in sorted_items:
f_out.write(str(x[1])+' ')