Cod sursa(job #2786400)

Utilizator lazarstefania63@yahoo.comLazar Stefania [email protected] Data 20 octombrie 2021 21:15:48
Problema BFS - Parcurgere in latime Scor 20
Compilator py Status done
Runda Arhiva educationala Marime 1.72 kb
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 ")