Pagini recente » Cod sursa (job #1866233) | Cod sursa (job #1164082) | Cod sursa (job #1323630) | Cod sursa (job #2823301) | Cod sursa (job #2786400)
from collections import deque
class Node:
def __init__(self, val):
self.val = val
self.edges = []
class Graph:
def __init__(self, nodes=None):
if nodes is None:
nodes = []
self.nodes = nodes
def add_node(self, val):
new_node = Node(val)
self.nodes.append(new_node)
def add_edge(self, node1, node2):
node1.edges.append(node2)
def bfs(self, starting_node):
if not self.nodes:
return []
start = self.nodes[starting_node-1]
visited, queue, result = {start}, deque([start]), [[start]]
while queue:
node = queue.popleft()
aux = []
for n in node.edges:
if n not in visited:
queue.append(n)
visited.add(n)
aux.append(n)
if aux:
result.append(aux)
return result
graph = Graph()
f = open("bfs.in", "r")
f_out = open("bfs.out", "w")
numbers_list = f.readline().split()
N = int(numbers_list[0])
M = int(numbers_list[1])
S = int(numbers_list[2])
for i in range(1, N + 1):
graph.add_node(i)
for i in range(M):
numbers_list = f.readline().split()
x = int(numbers_list[0])
y = int(numbers_list[1])
for n0 in graph.nodes:
for n1 in graph.nodes:
if n0.val == x and n1.val == y:
graph.add_edge(n0, n1)
bfs_result = graph.bfs(S)
for i in range(1, N+1):
ok = 0
for j in bfs_result:
for k in j:
if i == k.val:
f_out.write(str(bfs_result.index(j)) + " ")
ok = 1
if ok == 0:
f_out.write("-1 ")