Exemple #1
0
    def __init__(self, grafo, vertice):

        fila = Fila()

        #lista para guardar os vertices por distancia
        auxDist = []
        for i in range(len(grafo)):
            auxDist.append([])

        cont = 1
        self.__vetor_distancias = ([0] * len(grafo))
        self.__vetor_visitacao = ([-1] * len(grafo))

        fila.QEUEput(vertice)
        fila.QEUEput(-1)  # separa a fila por camada

        self.__vetor_visitacao[vertice] = cont

        cont += 1
        distancia = 0

        while fila.QEUEempty() != 0:
            v = fila.QEUEget()

            #se o v for igual a -1 significa que e o fim da fila
            if v != -1:
                camada = fila.QEUEget()

                #aumenta a distancia caso a camada = -1,
                aux = distancia
                if camada == -1:
                    distancia += 1
                else:
                    #se a camada nao for igual a -1, ela e inserida novamente no inicio da fila,
                    # pois se trata de um vertice
                    fila.addInicioDaFila(camada)

                #preenche o vetor de visitaçao
                for i in grafo[v]:
                    if self.__vetor_visitacao[i] == -1:
                        self.__vetor_visitacao[i] = cont
                        cont = cont + 1
                        fila.QEUEput(i)

                #verifico se minha distancia mudou
                #caso a distancia tenha mudado, insiro meus vertices pertencentes a distancia
                if aux != distancia:
                    auxDist[distancia] = (fila.getFila())
                    fila.QEUEput(
                        -1
                    )  # insiro no fim da fila para identificar que e outra camada

        #mantem na lista de distancia apenas, as listas nao nulas
        auxDist2 = []
        for i in auxDist:
            if len(i) != 0:
                auxDist2.append(i)

        #soma a quantidade de cidades por cada distancia
        cont = 0
        for i in auxDist2:
            soma = 0
            for j in i:
                soma += 1
            self.__vetor_distancias[cont] = soma
            cont += 1

        fila.QEUEfree()