Exemple #1
0
 def __init__(self, capacidad, id_esquina_polo_norte):
     """Crea una instancia de la clase."""
     self.grafo = Grafo()
     self.dicc_fabricas = {}
     self.dicc_esquinas = {}
     self.capacidad = int(capacidad)
     self.polo_norte = int(id_esquina_polo_norte)
Exemple #2
0
    def leerTroncales(self):
        print("\033[0;32m" + "*** Reading JSON...***")
        print("\033[0;32m" + "*** Mapping Troncales...***")
        self.grafo = Grafo()
        self.diccionarioTroncales = {}

        for troncal in self.troncales:
            letra = troncal["letra"]
            nombre = troncal["nombre"]
            C1 = troncal["conexion1"]
            C2 = troncal["conexion2"]
            C3 = troncal["conexion3"]
            C4 = troncal["conexion4"]
            C5 = troncal["conexion5"]
            C6 = troncal["conexion6"]

            self.diccionarioTroncales[letra] = nombre

            self.grafo.agregarVertice(Vertice(letra))

            if C1 != "": self.esquinas.append(letra + C1)
            if C2 != "": self.esquinas.append(letra + C2)
            if C3 != "": self.esquinas.append(letra + C3)
            if C4 != "": self.esquinas.append(letra + C4)
            if C5 != "": self.esquinas.append(letra + C5)
            if C6 != "": self.esquinas.append(letra + C6)

        print("\033[1;37m   " +
              "- - - - - - - - - - - - - - - - - - - - - - - - - -")
        for esquina in self.esquinas:
            self.grafo.agregarBorde(esquina[:1], esquina[1:])
        self.grafo.imprimirGrafo(self.diccionarioTroncales)
        print("\033[1;37m   " +
              "- - - - - - - - - - - - - - - - - - - - - - - - - -")
Exemple #3
0
class Sistema(object):
    """Representa al sistema que se ocupa de resolver los problemas de Navidad."""
    def __init__(self, capacidad, id_esquina_polo_norte):
        """Crea una instancia de la clase."""
        self.grafo = Grafo()
        self.dicc_fabricas = {}
        self.dicc_esquinas = {}
        self.capacidad = int(capacidad)
        self.polo_norte = int(id_esquina_polo_norte)

    def agregar_esquina(self, id_esquina, x, y, latitud, longitud):
        """Funcion que se encarga de agregar una esquina al mapa."""
        nueva_esquina = Esquina(id_esquina, x, y, latitud, longitud)
        self.dicc_esquinas[id_esquina] = nueva_esquina
        self.grafo.agregar_vertice(nueva_esquina)

    def agregar_arista(self, id_esquina_inicial, id_esquina_final):
        esquina_inicial = self.dicc_esquinas[id_esquina_inicial]
        esquina_final = self.dicc_esquinas[id_esquina_final]
        peso = calcular_peso(esquina_inicial, esquina_final)
        self.grafo.agregar_arista(peso, esquina_inicial, esquina_final)

    def agregar_fabrica(self, id_fabrica, id_esquina, horario_entrada,
                        horario_salida):
        nueva_fabrica = Fabrica(id_fabrica, id_esquina, horario_entrada,
                                horario_salida)
        self.dicc_fabricas[id_fabrica] = nueva_fabrica

    def agregar_juguete(self, id_fabrica, id_juguete, valor, peso):
        try:
            nuevo_juguete = Juguete(id_fabrica, id_juguete, valor, peso)
            fabrica = self.dicc_fabricas[id_fabrica]
            fabrica.agregar_juguete(nuevo_juguete)
        except KeyError:
            print "Error: la fabrica con id %s no existe" % (id_fabrica)

    def valuar_juguetes(self, id_fabrica):
        fabrica = self.dicc_fabricas[id_fabrica]
        lista_ju = fabrica.listar_juguetes()
        #Armo las lista que seran los parametros del problema de la mochila.
        lista_pesos = []
        lista_valores = []
        lista_ids = []
        for jug in lista_ju:
            lista_pesos.append(jug.obtener_peso())
            lista_valores.append(jug.obtener_valor())
            lista_ids.append(jug.obtener_id())
        return problema_mochila(len(lista_ju), self.capacidad, lista_pesos,
                                lista_valores, lista_ids)

    def listar_fabricas(self):
        lista = problema_charlas(self.dicc_fabricas)
        return str("Cantidad: " + str(len(lista)) + '\n' +
                   '\n'.join(['%s' % str(v) for v in lista])), lista

    def listar_camino_minimo(self, id_fabrica):
        fabrica = self.dicc_fabricas[id_fabrica]
        esquina_final = self.dicc_esquinas[fabrica.obtener_esquina()]
        esquina_inicial = self.dicc_esquinas[self.polo_norte]
        return self.grafo.camino_minimo(esquina_inicial, esquina_final)
Exemple #4
0
	def monta_grafo(self, dados_do_grafo):
		
		if len(dados_do_grafo) > 0:
			self.grafo = Grafo(dados_do_grafo) #instancia da classe Grafo
			self.grafo.cria_lista_adjacencia() #metodo que cria a lista de adjacencia
			return True
		else:
			return False
Exemple #5
0
	def test_distancia(self):
		# teste verdadeiro
		G = Grafo(dados_valido)
		G.cria_lista_adjacencia()
		self.assertEqual(G.calcula_distancia(['0', '1', '2']), 21)

		# testa falso
		G = Grafo(dados_invalido)
		G.cria_lista_adjacencia()
		self.assertEqual(G.calcula_distancia(['0', '1', '2']), None)
def grafo_aleatorio(n_vertices=5, n_arestas=6, is_conexo=True):
    if n_arestas <= n_vertices and is_conexo == True:
        raise Exception(
            'Não é possível gerar um grafo conexo com n_arestas menor que n_vertices'
        )
    aleatorio = Grafo(n_vertices)

    for i in range(n_vertices):
        aleatorio.setInfo(i, f'Vertice {i}')

    if is_conexo:
        vertices = [i
                    for i in range(n_vertices)]  # lista de vértices não usados
        v = vertices.pop(random.randint(0,
                                        len(vertices) -
                                        1))  # primeiro vértice usado
        adjcencias_conexas(aleatorio, v, vertices,
                           v)  # criação das adjacencias

        for i in range(n_arestas - len(aleatorio.arestas())):
            aleatorio.criaAdjascencia(random.randint(0, n_vertices - 1),
                                      random.randint(0, n_vertices - 1),
                                      random.randint(1, 10))
    else:
        for i in range(n_arestas):
            aleatorio.criaAdjascencia(random.randint(0, n_vertices - 1),
                                      random.randint(0, n_vertices - 1),
                                      random.randint(1, 10))

    return aleatorio
Exemple #7
0
	def test_dijkstra(self):
		# teste verdadeiro
		G = Grafo(dados_valido)
		G.cria_lista_adjacencia()
		resposta_esperada = {'caminho': ['3', '1', '0'], 'distancia': 23}
		self.assertEqual(G.dijkstra('0', '3'), resposta_esperada)

		# testa falso
		G = Grafo(dados_invalido)
		G.cria_lista_adjacencia()
		resposta_esperada = None
		self.assertEqual(G.dijkstra('0', '3'), resposta_esperada)
Exemple #8
0
	def test_profundidade(self):
		# teste verdadeiro
		G = Grafo(dados_valido)
		G.cria_lista_adjacencia()
		resposta_esperada = [['0'], ['1', '2'], ['2', '3', '2']]
		self.assertEqual(G.busca_em_profundidade('0', '2'), resposta_esperada)

		# testa falso
		G = Grafo(dados_invalido)
		G.cria_lista_adjacencia()
		resposta_esperada = [['0']]
		self.assertEqual(G.busca_em_profundidade('0', '2'), resposta_esperada)
Exemple #9
0
	def test_prim(self):
		# teste verdadeiro
		G = Grafo(dados_valido)
		G.cria_lista_adjacencia()
		resposta_esperada = {'caminho': [['2', '3', 12], ['2', '0', 14], ['0', '1', 10]], 'distancia': 36}
		self.assertEqual(G.prim('2'), resposta_esperada)

		# testa falso
		G = Grafo(dados_invalido)
		G.cria_lista_adjacencia()
		resposta_esperada = None
		self.assertEqual(G.prim('2'), resposta_esperada)
def gravar(grafo: Grafo, nome):
    g_file = open(f'{nome}.txt', 'w')

    # writing file
    # writing vertices
    g_file.write(f"* Vertices {grafo.getSize()}\n")
    for i in range(len(grafo.getNodes())):
        g_file.write(f'{i} "{grafo.getNodes()[i]}"\n')

    # writing edges
    g_file.write(f'* Arcs\n')
    for i in grafo.arestas():
        g_file.write(f'{i}\n')

    g_file.close()
Exemple #11
0
def converteMAparaMI(matriz, ehDirecionado, ehPonderado):
    tamanho = len(matriz)
    listaVertices = list(range(tamanho))
    listaArestas = []
    listaJaInseridos = []
    for i in range(
            tamanho
    ):  #Para cada posição da matriz verifica se tem uma ligação entre os vértices da posicção i e j
        for j in range(tamanho):
            if not ehDirecionado:  #Verifica se o grafo é não direcionado
                if matriz[i][j] != '0' and [
                        str(j), str(i), matriz[i][j]
                ] not in listaJaInseridos:  #Verifica se há uma ligação entre os vértices i e j, e se já foi inserida anteriormente
                    listaArestas.append([
                        str(i), str(j), matriz[i][j]
                    ])  #Insere na lista de arestas no formato (u,v,p)
                    listaJaInseridos.append(
                        [str(i), str(j), matriz[i][j]]
                    )  #Insere na lista as arestas já inseridas, para evitar a repetição de arestas
            elif matriz[i][
                    j] != '0':  #Verifica se tem uma ligação entre os vértices da posição i e j
                listaArestas.append(
                    [str(i), str(j), matriz[i][j]]
                )  #Insere na lista de arestas no formato (u,v,p), sem verificação se a aresta já foi inserida(grafo direcionado)
    grafo = Grafo(
        listaVertices, listaArestas, ehDirecionado,
        ehPonderado)  #Cria grafo auxiliar que será a entrada da geraMI
    return geraMI(grafo)
 def __init__(self, matriz, n):
     self.g = Grafo.Grafo(matriz, n)
     self.visitado = [False] * (self.g.n**2)
     self.bateriaAtual = self.g.bateriaInicial
     self.retorno = list()
     self.caminho = list()
     self.SeqAcoes = list()
Exemple #13
0
 def procesarCadena(self, cadena, operacion):
     grafo = Grafo(self.Q, self.Sigma, self.Delta, "AFD")
     alfa = grafo.auxAlfabeto
     est = grafo.auxEstados
     tran = grafo.auxtransi
     ax = self.q0[1]
     bandera = False
     for i in range(len(cadena)):
         indest = est.index(ax)
         indalfa = alfa.index(cadena[i])
         if tran[est.index(ax) + (indalfa + (indest * (len(alfa)-1)))] != None:
             bandera = True
             ax = tran[est.index(ax) + (indalfa + (indest * (len(alfa)-1)))]
         else:
             bandera = False
             break
     if operacion == "proceCad":
         if bandera == True and ax in self.F:
             return True
         else:
             return False
     elif operacion == "returnTran":
         return tran
     elif operacion == "returnAlfa":
         return alfa
     elif operacion == "returnEst":
         return est
Exemple #14
0
 def procesarCadenaConDetalles(self, cadena):
     grafo = Grafo(self.Q, self.Sigma, self.Delta, "AFD")
     alfa = grafo.auxAlfabeto
     est = grafo.auxEstados
     tran = grafo.auxtransi
     ax = self.q0[1]
     bandera = False
     estadosRecorridos = str(self.q0[1])
     for i in range(len(cadena)):
         indest = est.index(ax)
         indalfa = alfa.index(cadena[i])
         if tran[est.index(ax) + (indalfa + (indest * (len(alfa)-1)))] != None:
             bandera = True
             ax = tran[est.index(ax) + (indalfa + (indest * (len(alfa)-1)))]
             estadosRecorridos += (" -> "+str(ax))
         else:
             estadosRecorridos += " -> ?? "
             bandera = False
             break
     if bandera == True and ax in self.F:
         estadosRecorridos += "      |CADENA ACEPTADA| "
         return estadosRecorridos
     else:
         estadosRecorridos += "      |CADENA NO ACEPTADA| "
         return estadosRecorridos
Exemple #15
0
def app():
    grafo = None
    distancias = readFile("distancias.txt")
    mapa = readFile("mapa.txt")

    mapa_linhas = mapa.split("\n")
    for i in mapa_linhas:
        values = i.split(" ")
        if grafo == None:
            grafo = Grafo.Grafo(values[0], values[1])
        else:
            verticeOrigem = grafo.obterVerticePorNome(values[0])
            verticeDestino = grafo.obterVerticePorNome(values[1])
            arresta = Arresta.Arresta(verticeOrigem, verticeDestino,
                                      int(values[2]))
            verticeOrigem.addArresta(arresta)
            #arrestaInversa = Arresta.Arresta(verticeDestino, verticeOrigem, values[2])
            #verticeDestino.addArresta(arrestaInversa)

    distancias_linhas = distancias.split("\n")
    for i in distancias_linhas:
        values = i.split(" ")
        vertice = grafo.obterVerticePorNome(values[0])
        vertice.setDistancia(int(values[1]))

    caminho = grafo.aEstrela()
    caminho.printCaminho()
Exemple #16
0
def cria_grafoOR() -> object:
    """

    :rtype: object
    """

    name = input("qual o nome do grafo: ")
    x = int(input("Informe a quantidade de vertices do grafo ORIENTADO\n"))

    lista = [0 for i in range(x)]
    listaADJ = [['' for i in range(1)] for j in range(x)]
    listaADJOB = [[0 for i in range(1)] for j in range(x)]
    matriz = [[0 for i in range(x)] for j in range(x)]
    print(matriz)
    print(lista)

    dicStN = {}
    dicNtS = {}

    for i in range(x):
        a = str(input("informe os vertices a serem inseridos\n"))
        vertice = Vertice(a, '', '')
        lista[i] = vertice
        dicStN[a] = i
        dicNtS[i] = a

    for i in range(x):
        for j in range(x):

            print('Existe arestas saindo do vertice ', dicNtS[j],
                  ' para o vertice ', dicNtS[i],
                  '? (s para sim, qualquer letra para não): ')
            c = input()
            if (c == 's'):
                s = int(input('Qual o peso da aresta: '))
                matriz[i][j] = Aresta('', '', s)
            else:
                matriz[i][j] = Aresta('', '', 0)

    print(lista)
    print(listaADJ)

    for i in range(len(lista)):
        for j in range(len(lista)):
            arest = matriz[i][j]
            if (arest.num != 0):
                x = dicNtS[i]
                y = dicNtS[j]
                listaADJ[i][0] = x
                listaADJ[i].append(y)
                listaADJOB[i][0] = lista[i]
                listaADJOB[i].append(lista[j])
    print(listaADJ)
    print(listaADJOB)

    new_graf = Grafo(name, matriz, lista, listaADJ, listaADJOB, dicStN,
                     dicNtS)  # type: Grafo
    print(new_graf.dicStN)

    return new_graf
Exemple #17
0
def converteMIparaMA(matriz, ehDirecionado, ehPonderado):
    qntArestas = len(matriz)
    qntVertices = len(matriz[0])
    listaArestas = []
    listaVertices = list(range(qntVertices))
    jaAcheiPrimeiro = False
    for i in range(qntArestas):
        for j in range(qntVertices):
            if (matriz[i][j] != '0'):
                if (ehDirecionado):
                    if (matriz[i][j] > '0'):
                        posicaoSaindo = j
                        peso = matriz[i][j]
                    else:
                        posicaoChegando = j

                else:
                    if (jaAcheiPrimeiro):
                        segundaPosicao = j
                    else:
                        primeiraPosicao = j
                        peso = matriz[i][j]
                        jaAcheiPrimeiro = True

        jaAcheiPrimeiro = False
        if (ehDirecionado):
            listaArestas.append(
                [str(posicaoSaindo),
                 str(posicaoChegando), peso])
        else:
            listaArestas.append(
                [str(primeiraPosicao),
                 str(segundaPosicao), peso])
    grafo = Grafo(listaVertices, listaArestas, ehDirecionado, ehPonderado)
    return geraMA(grafo)
Exemple #18
0
def converteLAparaMI(
        lista, ehDirecionado, ehPonderado
):  # Utiliza os atributos para conversão ao inSves do objeto
    listaV = lista.vertices
    listaA = lista.arestas
    grafo = Grafo(listaV, listaA, ehDirecionado, ehPonderado)

    return geraMI(grafo)
Exemple #19
0
 def __init__(self, busca, distancia=5):
     self.ponto_inicial = 'http://www.rugbyfluminense.com.br/'
     self.distancia = 2
     self.crawler = Crawler.Crawler()
     self.criar_no = Criar_No.Criar_No
     self.catalogo = []
     self.busca = busca  #### termo buscado
     self.grafo = Grafo.Grafo()
	def __init__(self, matriz, n):
		self.g = Grafo.Grafo(matriz, n)
		self.bateriaAtual = self.g.bateriaInicial
		self.ouroAtual = 0
		self.coletado = 0
		self.explorados = 0
		self.SeqAcoes = list()
		self.distancias = {}
Exemple #21
0
 def decimal_final_state(self, linea, columna, text, word):
     self.counter += 1
     self.column += 1
     Deci = Grafo.grafica()
     if self.counter < len(text):
         if (self.flag_decimal == False):
             Deci.grafoDecimal()
             self.flag_decimal = True
         return [linea, columna, 'decimal', word]
Exemple #22
0
 def simple_string_final_state(self, linea, columna, text, word):
     self.counter += 1
     self.column += 1
     Char = Grafo.grafica()
     if self.counter < len(text):
         if (self.flag_char == False):
             Char.grafoChar()
             self.flag_char = True
         return [linea, columna, 'string', word]
Exemple #23
0
def converteMIparaLA(
        matriz, ehDirecionado,
        ehPonderado):  # Utiliza os atributos para conversão ao inves do objeto

    listaV = matriz.vertices
    listaA = matriz.arestas
    grafo = Grafo(listaV, listaA, ehDirecionado, ehPonderado)

    return geraLA(grafo)
Exemple #24
0
 def main():
     mapa = Grafo()
     mapa.agregar_nodo(Nodo((0,1), "nodo1"))
     mapa.agregar_nodo(Nodo((0,0), "nodo2"))
     mapa.agregar_arco(Nodo((0,1), "nodo1"))
     print mapa.to_string()
     
     return 0
Exemple #25
0
def leer_itinerario(archivo):

    grafito = Grafo(DIRIGIDO)

    with open(archivo) as file:

        itinerario_csv = csv.reader(file, delimiter='\n')

        for linea in itinerario_csv:

            lineas = linea[0].split(',')

            if len(lineas) == 2: poner_arista(grafito, lineas[0], lineas[1])

            else:
                for elem in lineas:
                    grafito.agregar_vertice(elem)

    return orden_topologico_dfs(grafito)
Exemple #26
0
    def F_state(self, linea, columna, text, word):
        self.counter += 1
        self.column += 1
        Multi = Grafo.grafica()
        if self.counter < len(text):
            if (self.flag_multicomment == False):
                Multi.grafoMultiComment()
                self.flag_multicomment = True

            return [linea, columna, 'comentario', word]
def definirClube(aData = []):
    serie = Grafo()
    print(20 * "-", "CLUBES", 20 * "-", "HABILIDADE", 18 * "-")
    with open('times.txt', 'r') as file:
        lines = file.readlines()
        for data in lines:
            dados = data[:-1]
            habilidade = random.randint(0, 10)
            # aData.append({dados:habilidade})
            clube = Vertice()
            clube.nome = dados
            clube.dado = habilidade
            vizinho = Vertice()
            vizinho.nome = dados
            vizinho.dado = habilidade
            # print(clube.nome, clube.dado)
            serie.grafo = {clube.nome:clube.dado}
            # key = hash(serie.grafo)
            print(serie.grafo)
Exemple #28
0
    def generarGrafo(self, colores):
        # Inicializamos el Grafo
        gra = Grafo.Grafo()
        for i in range(self.g.numVertices):
            gra.agregarVertice(i, colores[i])
        for j in self.g.listaVertices:
            vecinos = self.g.obtenerVertice(j).obtenerConexiones()
            for h in vecinos:
                gra.agregarArista(j, h.id, 0)

        return gra
Exemple #29
0
    def double_string_final_state(self, linea, columna, text, word):
        self.counter += 1
        self.column += 1
        doublestring = Grafo.grafica()
        if self.counter < len(text):

            if (self.flag_string == False):
                doublestring.grafoString()
                self.flag_string = True

            return [linea, columna, 'string', word]
Exemple #30
0
	def test_monta_grafo(self):
		# teste verdadeiro
		G = Grafo(dados_valido)
		self.assertEqual(G.cria_lista_adjacencia(), True)	
		
		# testa falso
		G = Grafo(dados_invalido)	
		self.assertEqual(G.cria_lista_adjacencia(), False)
Exemple #31
0
class EspacioEstados:
    def __init__(self, file):
        self.graph = Grafo(
            file)  # Creamos el grafo a partir del fichero graphlm

    def sucesores(self, state):
        actual = state.get_posicionActual  # Obtenemos la posicion actual y la marcamos como el origen
        sucesores = []  # Creamos una lista vacia de sucesores
        listadenodos = self.graph.adyacentesnodo(actual)

        #Ver cuando listadenodos es NoneType
        if listadenodos is None:
            return sucesores

        for sucesor in listadenodos:  # Para cada nodo:
            destino = sucesor[1]  # marcamos el sucesor como destino
            #accM = 'Ir por ' + self.graph.get_nombrecalle(actual, destino)
            accM = '(' + self.graph.get_nombrecalle(actual, destino) + ')'
            costAcci = float(sucesor[3])
            #costAcci = self.graph.get_coste(actual, destino)  # buscamos el coste en el grafo entre esos dos nodos
            try:
                listadenodos.remove(actual)
            except ValueError:
                pass
            estadoNuevoM = Estado(
                destino, list.copy(state.listaNodos)
            )  # Creamos el nuevo estado desde el nodo destino
            actual = destino  # Cambiamos la posicion actual
            sucesores.append([
                accM, estadoNuevoM, costAcci
            ])  # Añadimos el sucesor a la lista en el formato pedido
        return sucesores

    def esta(self, state):  # Nos dice si state está en el espacio de estados
        for nodososm in self.graph.listanodos():
            if state.get_posicionActual() == nodososm[0]:
                return True
        return False
Exemple #32
0
class Main(object):

	#construtor da classe, recebe como parametro os arquivos de entrada e saida
	def __init__(self, interface = None, arquivo_entrada = None, arquivo_saida = None):
		self.arquivo_entrada = arquivo_entrada
		self.arquivo_saida =  arquivo_saida
		self.arquivo = Arquivo( self.arquivo_entrada, self.arquivo_saida ) #estancia da classe Arquivo
		self.grafo = None
		self.interface = interface

	#funcao que que valida os arquivos de entrada e saida
	def validar_arquivo(self):
		
		try:
			# Abro os aqruivos para garantir que não estão corrompidos
			e = open(self.arquivo_entrada, "r")
			s = open(self.arquivo_saida, "w")
			#verifica se existe conteudo no arquivo de entrada
			if len(e.readline()) == 0:
				raise IOError

		#tratando os erros
		except IOError:
			# os.system("cls")
			print("\nArquivos de entradas invalidos ou corrompidos")
			sys.exit(0)

	#chama o metodo que ler os dados do arquivo de entrada
	def tratar_dados_de_entrada(self):
		return self.arquivo.ler_entrada()

	#chama o metodo que vai gravar as respostas no arquivo de saida
	def grava_resposta_arquivo(self, algoritmo, resposta):
		return self.arquivo.grava_saida(algoritmo, resposta)

	# #monta a lista de adjacencia
	def monta_grafo(self, dados_do_grafo):
		
		if len(dados_do_grafo) > 0:
			self.grafo = Grafo(dados_do_grafo) #instancia da classe Grafo
			self.grafo.cria_lista_adjacencia() #metodo que cria a lista de adjacencia
			return True
		else:
			return False

	#Executa algoritmo que calcula a distancia de um determinado caminho
	def calcula_distancia(self, caminho, requisicao = False):

		lista_caminho = list(caminho) #copia a lista de caminho para lista_caminho
		result = self.grafo.calcula_distancia(caminho)

		if result == None:
			if requisicao == True:
				return result
			else:
				self.interface.lista_respostas.append('Calcula distancia - [ ERROR ]')
		else:
			dados = {"caminho": lista_caminho, "distancia": result}

			if requisicao == True:
				return dados
			else:
				resposta = self.grava_resposta_arquivo("distancia", dados)

				if resposta != False:
					self.interface.lista_respostas.append('Calcula distancia - [ OK ]')

	def busca_largura(self, lista, requisicao = False):
		vertices = list(lista)
		result = self.grafo.busca_em_largura( lista[0], lista[1] )

		if result == None:
			if requisicao == True:
				return result
			else:
				self.interface.lista_respostas.append('Busca em largura  - [ ERROR ]')
		else:
			dados = {"vertices": vertices, "resposta": result}
			if requisicao == True:
				return dados
			else:
				resposta = self.grava_resposta_arquivo("largura", dados)

				if resposta != False:
					self.interface.lista_respostas.append('Busca em largura  - [ OK ]')

	def busca_profundidade(self, lista, requisicao = False):
		vertices = list(lista)
		result = self.grafo.busca_em_profundidade( lista[0], lista[1] )

		if result == None:
			if requisicao == True:
				return result
			else:
				self.interface.lista_respostas.append('Busca em profundidade  - [ ERROR ]')
		else:
			dados = {"vertices": vertices, "resposta": result}

			if requisicao == True:
				return dados
			else:
				resposta = self.grava_resposta_arquivo("profundidade", dados)

				if resposta != False:
					self.interface.lista_respostas.append('Busca em profundidade  - [ OK ]')

	def menor_caminho(self, origem, destino, requisicao = False):

		result = self.grafo.dijkstra(origem, destino)

		if result == None:
			if requisicao == True:
				return result
			else:
				self.interface.lista_respostas.append('Busca menor caminho (DIJKSTRA)  - [ ERROR ]')
		else:
			dados = {"vertices": [origem, destino], "resposta": result}

			if requisicao == True:
				return dados
			else:
				resposta = self.grava_resposta_arquivo("menorcaminho", dados)

				if resposta != False:
					self.interface.lista_respostas.append('Busca menor caminho (DIJKSTRA)  - [ OK ]')

	def gerar_prim(self, origem, requisicao = False):
		result = self.grafo.prim( origem )

		if result == None:
			if requisicao == True:
				return result
			else:
				self.interface.lista_respostas.append('Prim - [ ERROR ]')
		else:
			dados = {"vertices": origem, "resposta": result}

			if requisicao == True:
				return dados
			else:
				print(dados)
				resposta = self.grava_resposta_arquivo("prim", dados)

				if resposta != False:
					self.interface.lista_respostas.append('Prim - [ OK ]')
		
	#executa a lista de comandos do arquivo de entrada
	def executa_comandos(self, comandos):

		for i in comandos:
			self.chama_funcoes(i)

		print("Executando...")

	def chama_funcoes(self, comando, requisicao = False):

		if (requisicao == True):
			if comando['algoritmo'].lower() == "distancia":
				return self.calcula_distancia(comando['lista'], True)

			if comando['algoritmo'].lower() == "largura":
				return self.busca_largura(comando['lista'], True)

			if comando['algoritmo'].lower() == "profundidade":
				return self.busca_profundidade(comando['lista'], True)

			if comando['algoritmo'].lower() == "menorcaminho":
				return self.menor_caminho(comando['lista'][0], comando['lista'][1], True)

			if comando['algoritmo'].lower() == "prim":
				return self.gerar_prim(comando['lista'][0], True)
		else:

			if comando['algoritmo'].lower() == "distancia":
				return self.calcula_distancia(comando['lista'])

			if comando['algoritmo'].lower() == "largura":
				return self.busca_largura(comando['lista'])

			if comando['algoritmo'].lower() == "profundidade":
				return self.busca_profundidade(comando['lista'])

			if comando['algoritmo'].lower() == "menorcaminho":
				return self.menor_caminho(comando['lista'][0], comando['lista'][1])

			if comando['algoritmo'].lower() == "prim":
				return self.gerar_prim(comando['lista'][0])
Exemple #33
0
from Grafo import *

espacio = Grafo();

espacio.agregar("Arad")
espacio.agregar("Timisora")
espacio.agregar("Zerind")
espacio.agregar("Oradea")
espacio.agregar("Sibiu")
espacio.agregar("Lugoj")
espacio.agregar("Mehadia")
espacio.agregar("Drobeta")
espacio.agregar("Craiova")
espacio.agregar("Rimnicu")
espacio.agregar("Fagaras")
espacio.agregar("Pitesti")
espacio.agregar("Bucarest")
espacio.agregar("Giurgiu")
espacio.agregar("Urziceni")

espacio.relacionarUnilateral("Arad","Zerind",75)
espacio.relacionarUnilateral("Arad","Sibiu",140)
espacio.relacionarUnilateral("Arad","Timisora",118)

espacio.relacionarUnilateral("Zerind","Oradea",71)

espacio.relacionarUnilateral("Sibiu","Fagaras",99)
espacio.relacionarUnilateral("Sibiu","Rimnicu",80)


espacio.relacionarUnilateral("Timisora","Lugoj",111)
Exemple #34
0
class Main:

	#construtor da classe, recebe como parametro os arquivos de entrada e saida
	def __init__(self, arquivo_entrada, arquivo_saida):
		self.arquivo_entrada = arquivo_entrada
		self.arquivo_saida =  arquivo_saida
		self.arquivo = Arquivo( self.arquivo_entrada, self.arquivo_saida ) #estancia da classe Arquivo
		self.grafo = None

	#funcao que que valida os arquivos de entrada e saida
	def validar_arquivo(self):
		
		try:
			# Abro os aqruivos para garantir que não estão corrompidos
			e = open(self.arquivo_entrada, "r")
			s = open(self.arquivo_saida, "w")
			#verifica se existe conteudo no arquivo de entrada
			if len(e.readline()) == 0:
				raise Erros #lancando erro

		#tratando os erros
		except IOError:
			os.system("cls")
			print("\nArquivos de entradas invalidos ou corrompidos")
			sys.exit(0)
		except Erros as E:
			os.system("cls")
			print(E.arquivo_vazio())
			sys.exit(0)

	#chama o metodo que ler os dados do arquivo de entrada
	def tratar_dados_de_entrada(self):
		return self.arquivo.ler_entrada()

	#chama o metodo que vai gravar as respostas no arquivo de saida
	def grava_resposta_arquivo(self, algoritmo, resposta):
		return self.arquivo.grava_saida(algoritmo, resposta)

	#monta a lista de adjacencia
	def monta_grafo(self, dados):
		self.grafo = Grafo(dados) #instancia da classe Grafo
		self.grafo.cria_lista_adjacencia() #metodo que cria a lista de adjacencia

	#Executa algoritmo que calcula a distancia de um determinado caminho
	def calcula_distancia(self, caminho):
		lista_caminho = list(caminho) #copia a lista de caminho para lista_caminho
		result = self.grafo.calcula_distancia(caminho)

		if result == None:
			print("Caminho Invalido")
		else:
			dados = {"caminho": lista_caminho, "distancia": result}
			resposta = self.grava_resposta_arquivo("distancia", dados)

			if resposta != False:
				#time.sleep( 1 )
				print("Calcula distancia - [ OK ]")

	#executa o algoritmo que encontra uma rota entre 2 vertices
	def encontra_caminho(self, v_origem, v_destino):
		result = self.grafo.encontra_caminho( v_origem, v_destino )
		if result == None:
			print("Caminho Invalido")
		else:
			self.grava_resposta_arquivo("caminho", result)

	def busca_largura(self, lista):
		vertices = list(lista)
		result = self.grafo.busca_em_largura( lista[0], lista[1] )
		if result == None:
			print("Caminho Invalido")
		else:
			dados = {"vertices": vertices, "resposta": result}
			resposta = self.grava_resposta_arquivo("largura", dados)

			if resposta != False:
				#time.sleep( 1 )
				print("Busca em largura  - [ OK ]")

	def busca_profundidade(self, lista):
		vertices = list(lista)
		result = self.grafo.busca_em_profundidade( lista[0], lista[1] )
		if result == None:
			print("Caminho Invalido")
		else:
			dados = {"vertices": vertices, "resposta": result}
			resposta = self.grava_resposta_arquivo("profundidade", dados)

			if resposta != False:
				#time.sleep( 1 )
				print("Busca em profundidade  - [ OK ]")

	def dijkstra(self, origem, destino):
		self.grafo.dijkstra(origem, destino)

	#executa a lista de comandos do arquivo de entrada
	def executa_comandos(self, comandos):
		os.system("cls")
		print ("\nExecutando algoritmos: \n")
		for i in comandos:
			self.chama_funcoes(i)

		print("\nArquivo de saida criado com sucesso")


	def chama_funcoes(self, comando):
		
		if comando['algoritmo'].lower() == "distancia":
			self.calcula_distancia(comando['lista'])

		if comando['algoritmo'].lower() == "largura":
			self.busca_largura(comando['lista'])

		if comando['algoritmo'].lower() == "profundidade":
			self.busca_profundidade(comando['lista'])
Exemple #35
0
	def monta_grafo(self, dados):
		self.grafo = Grafo(dados) #instancia da classe Grafo
		self.grafo.cria_lista_adjacencia() #metodo que cria a lista de adjacencia
Exemple #36
0
from Grafo import *
from Formiga import *
from Caminho import *
from Pool import *
from PoolSet import *
from Cmd import *
from random import choice

# Lendo parâmetros da linha de comando
cmd = Cmd()

# Número global de loops
numLoops = cmd.var['N']

# Criando o grafo
g = Grafo(cmd.var)
g.carregaGrafo()

# # Estrura que armaneza as formigas
# formigas = []

# # TODO acochambra
# cidadesDisponiveis = []
# for i in range(0,g.getQtdNos()):
# 	cidadesDisponiveis.append(i)

# # Gerador de numeros aleatorios sem repeticao
# num = NumerosAleatorios(g.getQtdNos())

# # Distribuição das formigas - cada um vai para uma cidade diferente
# for i in range(0,g.getQtdNos()):