Exemplo n.º 1
0
def arvore_geradora_minima_prim(graph):
    arv_minima = grafo.Grafo()
    corte = grafo.Grafo()
    #Definindo ponto inicial de onde será realizado algoritmo de prim
    vertice_inicial = graph.vertices[0].copy()
    corte.addVertice(vertice_inicial.copy()
                     )  #Adicionado no corte o vertice e todas suas arestas

    vertice_inicial.adjacentes.clear()
    arv_minima.addVertice(
        vertice_inicial)  #Adicionado na arvore minima somente o vertice

    while not verifica_arv_minima(graph, arv_minima):
        aresta = seleciona_menor_aresta(corte)
        peso = aresta[1].peso
        corte.addVertice(graph.getVertice(aresta[1].vertice).copy(
        ))  #Adicionado no corte o vertice onde estava a aresta minima

        aresta[0].adjacentes.clear()
        aresta[1].adjacentes.clear()
        arv_minima.addVertice(
            aresta[1]
        )  #Adicionado na arvore somente o vertice da aresta minima
        #Adicionando somente a aresta minima nos respectivos vertices
        vertex1 = arv_minima.getVertice(aresta[0].vertice)
        vertex2 = arv_minima.getVertice(aresta[1].vertice)
        vertex1.peso = peso
        vertex2.peso = peso
        arv_minima.addAresta(vertex1, vertex2.copy())
        arv_minima.addAresta(vertex2, vertex1.copy())

    return arv_minima
Exemplo n.º 2
0
    def h(self, estado, tipo):
        if tipo == 1:
            self.expandir(estado)
            if len(estado.antecessores) > 1:
                primeiro = estado.antecessores[
                    0]  # Garanto que o primeiro é a cidade inicial? SIM
                ultimo = estado.antecessores[-1]
                nos_agm = [primeiro] + estado.filhos + [ultimo]
            else:
                nos_agm = [self.estado_inicial] + estado.filhos

            lista = []
            for x in nos_agm:
                lista.append(x.valor)
            matriz = calculaMatriz(lista)
            cidades = [i for i in xrange(1, (len(nos_agm) + 1))]
            arestas = []
            for c1 in cidades:
                for c2 in cidades:
                    arestas.append((c1, c2, matriz[c1 - 1][c2 - 1]))

            grafo = G.Grafo(cidades, arestas)
            agm, custo = grafo.kruskal(
            )  #Gerar todas as arestas entre esses caras e executar o Kruskal
            return custo
        elif tipo == 2:
            self.expandir(estado)
            if len(estado.antecessores) > 1:
                ultimo = estado.antecessores[-1]
                nos_agm = estado.filhos + [ultimo]
            else:
                nos_agm = [self.estado_inicial] + estado.filhos

            lista = []
            for x in nos_agm:
                lista.append(x.valor)
            matriz = calculaMatriz(lista)
            cidades = [i for i in xrange(1, (len(nos_agm) + 1))]
            arestas = []
            for c1 in cidades:
                for c2 in cidades:
                    arestas.append((c1, c2, matriz[c1 - 1][c2 - 1]))

            grafo = G.Grafo(cidades, arestas)
            agm, custo = grafo.kruskal(
            )  # Gerar todas as arestas entre esses caras e executar o Kruskal
            return custo
        else:
            return "ERRO: HEURISTICA INEXISTENTE!!!"
Exemplo n.º 3
0
def main():
    nom_archivo = sys.argv[1]
    graf = grafo.Grafo()
    with open(nom_archivo) as archivo:
        cargar_vertices(archivo, graf)
    if graf.cantidad_vertices():
        realizar_comandos(graf)
Exemplo n.º 4
0
def seriabilidade(escalonamento):
    lista_passados = []
    g = grafo.Grafo("serial")
    for tj in escalonamento:
        # Adiciona vertices no grafo
        if tj.id not in g.vertices:
            g.add_vertice(tj.id)

        # Detecta leitura após escrita
        if tj.operacao == 'R':
            for ti in lista_passados:
                if ti.id != tj.id and ti.operacao == 'W' and tj.atributo == ti.atributo:
                    g.conectar(ti.id, tj.id)

        # Detecta escrita após leitura
        if tj.operacao == 'W':
            for ti in lista_passados:
                if ti.id != tj.id and ti.operacao == 'R' and tj.atributo == ti.atributo:
                    g.conectar(ti.id, tj.id)

        # Detecta escrita após escrita
        if tj.operacao == 'W':
            for ti in lista_passados:
                if ti.id != tj.id and ti.operacao == 'W' and tj.atributo == ti.atributo:
                    g.conectar(ti.id, tj.id)

        lista_passados.append(tj)
    return g
Exemplo n.º 5
0
    def setUp(self):
        self.g = grafo.Grafo()
        self.v1 = grafo.Vertice("A", 6)
        self.v2 = grafo.Vertice("B", 6)
        self.v3 = grafo.Vertice("C", 6)
        self.v4 = grafo.Vertice("D", 6)
        self.v5 = grafo.Vertice("E", 6)
        self.v6 = grafo.Vertice("F", 4)
        self.v7 = grafo.Vertice("G", 4)
        self.v8 = grafo.Vertice("H", 4)
        self.v9 = grafo.Vertice("I", 4)

        self.g.add_vertice(self.v1)
        self.g.add_vertice(self.v2)
        self.g.add_vertice(self.v3)
        self.g.add_vertice(self.v4)
        self.g.add_vertice(self.v5)
        self.g.add_vertice(self.v6)
        self.g.add_vertice(self.v7)
        self.g.add_vertice(self.v8)
        self.g.add_vertice(self.v9)

        self.g.conecta(self.v1, self.v4)
        self.g.conecta(self.v1, self.v5)
        self.g.conecta(self.v2, self.v5)
        self.g.conecta(self.v3, self.v6)
        self.g.conecta(self.v4, self.v7)
        self.g.conecta(self.v5, self.v8)
        self.g.conecta(self.v6, self.v9)
        self.g.conecta(self.v6, self.v8)
def cargarRedDesdeArchivo(nombreArchivo):
    red = grafo.Grafo()
    with open(nombreArchivo, 'rb') as fd:
        graphReader = csv.reader(fd) 
        for row in graphReader:
            if(len(row) == 5):
                nodo = grafo.Nodo(row[0],row[1]) 
                red.ingresar_nodo(nodo)
            elif(len(row)==2):
                red.ingresar_arista(row[0], row[1])
    return red
Exemplo n.º 7
0
def prim(grafo, aeropuerto_origen, modo):

    visitados = []
    visitados.append(aeropuerto_origen)
    heap = []
    arbol = g.Grafo()
    vertice_actual = grafo.obtener_vertice(aeropuerto_origen)
    peso_total = 0

    for adyacente in vertice_actual.obtener_adyacentes().keys():
        if modo == "barato":
            peso_arista = grafo.obtener_precio(aeropuerto_origen, adyacente)
        else:
            peso_arista = grafo.obtener_tiempo(aeropuerto_origen, adyacente)
        heapq.heappush(heap, (peso_arista, adyacente, aeropuerto_origen))

    for v in grafo.obtener_todos_vertices().values():
        arbol.agregar_vertice(v.obtener_ciudad(), v.obtener_codigo(), 0, 0)

    while heap:
        v = heapq.heappop(heap)
        if grafo.obtener_ciudad(v[1]) in visitados:
            continue

        if modo == "barato":
            arbol.agregar_arista(v[1], v[2], 0, v[0], 0)
        else:
            arbol.agregar_arista(v[1], v[2], v[0], 0, 0)

        visitados.append(grafo.obtener_ciudad(v[1]))
        vertice_actual = grafo.obtener_vertice(v[1])

        for key in vertice_actual.obtener_adyacentes().keys():
            ciudad_adyacente = grafo.obtener_ciudad(key)

            if ciudad_adyacente not in visitados:

                if modo == "barato":
                    a_guardar = grafo.obtener_precio(v[1], key)
                else:
                    a_guardar = grafo.obtener_tiempo(v[1], key)
                peso_total += int(a_guardar)
                heapq.heappush(heap, (a_guardar, key, v[1]))
    return arbol, peso_total
Exemplo n.º 8
0
def cargar_grafo(NOMBRE_ARCHIVO, CANTIDAD_ARTICULOS):
    try:
        archivo = open(NOMBRE_ARCHIVO, 'r')
        grafo_wiki = grafo.Grafo(True)
        archivo.readline()
        for n in range(CANTIDAD_ARTICULOS):
            linea = archivo.readline()
            header, resto = linea.split('>')
            grafo_wiki[header] = None
        archivo.seek(0)
        archivo.readline()
        for n in range(CANTIDAD_ARTICULOS):
            linea = archivo.readline()
            header, resto = linea.split('>')
            lista_links = resto.split('<')
            for link in lista_links:
                if link in grafo_wiki:
                    grafo_wiki.agregar_arista(header, link)
        archivo.close()
        return grafo_wiki
    except FileNotFoundError:
        raise
Exemplo n.º 9
0
    def tabuleiro_para_grafo(self, jogo):
        # letras = string.ascii_lowercase
        numeros = list(range(jogo.tamanho**2))
        g = grafo.Grafo(list(numeros[:jogo.tamanho**2]))
        g._grafo = defaultdict(lambda: defaultdict(int))
        matriz = []
        for i in range(0, jogo.tamanho**2, jogo.tamanho):
            matriz.append(numeros[i:i + jogo.tamanho])
        for x in range(jogo.tamanho):
            for y in range(jogo.tamanho):
                casa_atual = jogo.casa(x, y)
                if wumpus.CACADOR in casa_atual:
                    self.vertice_cacador = matriz[x][y]
                if wumpus.OURO in casa_atual:
                    self.vertice_ouro = matriz[x][y]
                if 0 <= x < jogo.tamanho - 1:
                    casa_proxima = jogo.casa(x + 1, y)
                    g.add_aresta((matriz[x][y], matriz[x + 1][y],
                                  self._calcula_custo(casa_atual,
                                                      casa_proxima)))
                if 0 < x <= jogo.tamanho - 1:
                    casa_anterior = jogo.casa(x - 1, y)
                    g.add_aresta((matriz[x][y], matriz[x - 1][y],
                                  self._calcula_custo(casa_atual,
                                                      casa_anterior)))

                if 0 <= y < jogo.tamanho - 1:
                    casa_direita = jogo.casa(x, y + 1)
                    g.add_aresta((matriz[x][y], matriz[x][y + 1],
                                  self._calcula_custo(casa_atual,
                                                      casa_direita)))

                if 0 < y <= jogo.tamanho - 1:
                    casa_esquerda = jogo.casa(x, y - 1)
                    g.add_aresta((matriz[x][y], matriz[x][y - 1],
                                  self._calcula_custo(casa_atual,
                                                      casa_esquerda)))
        return g
Exemplo n.º 10
0
def crear_grafo_archivo(archivo):
    '''Esta funcion se encarga de cargar los archivos del grafo, primero recorre todos los vertices del archivo y guarda en un diccionario auxiliar el nro de 
    id como clave y el nombre del personaje como dato y guarda en el diccionario vertices el nombre como lcave y como dato crea otro diccionario para los 
    adyacentes.
       Después recorre todas las aristas y se fija en el diccionario auxiliar cual es el nombre del personaje con el nro de id obtenido y lo busca en el diccionario
       de vertices y le asigna a su diccionario de adyacentes la clave como el nombre del personaje que esta conectado (que también se busca en el dic_auxiliar)
       y como dato el peso de la arista  '''

    with open(archivo, "r") as archivo_lectura:
        
        linea = archivo_lectura.readline()
        linea = archivo_lectura.readline() #Hago esto para que arranque a leer desde la linea despues de *Vertices
        cont_vertices = 0
        vertices = {} #Este diccionario gaurda como clave el nombre del personaje y como valor un diccionario de sus adyacentes
        dic_auxiliar = {} #Este diccionario contiene el ID del personaje como clave y el nombre como valor

        while "*Arcs" not in linea:

            aux = linea.split('"')
            nro_id = aux[0].rstrip(' ')
            dic_auxiliar[nro_id] = aux[1]
            vertices[aux[1]] = {}
            cont_vertices += 1
            linea = archivo_lectura.readline()

        linea = archivo_lectura.readline() 
        cont_aristas = 0    
        while (linea):
            linea = linea.rstrip('\n')
            arista = linea.split(' ')
            vertices[dic_auxiliar[arista[0]]][dic_auxiliar[arista[1]]] = float(arista[2])
            vertices[dic_auxiliar[arista[1]]][dic_auxiliar[arista[0]]] = float(arista[2])
            cont_aristas += 1
            linea = archivo_lectura.readline()
        
    grafo_marvel = grafo.Grafo(vertices, False, cont_vertices, cont_aristas)
    return grafo_marvel
import grafo
mapa1 = grafo.Grafo()
for a in range(5):
    mapa1.add_nodo()
mapa1.add_arco(0, 1, 10)
mapa1.add_arco(1, 0, 10)
mapa1.add_arco(1, 2, 10)
mapa1.add_arco(2, 1, 10)
mapa1.add_arco(1, 3, 10)
mapa1.add_arco(3, 1, 10)
mapa1.add_arco(2, 3, 10)
mapa1.add_arco(3, 2, 10)
if mapa1.hay_camino(4, 4):
    print "Hay camino de 4 a 4"
if mapa1.hay_camino(1, 4):
    print "Hay camino de 1 a 4"
Exemplo n.º 12
0
import grafo as gra
from datetime import datetime
""" Crear un Grafo Vacio """
print(" Creando un Grafo Vacio ")
prueba = gra.Grafo(0)
""" agregando los nodos """
print(" agregando los nodos ")
c = 0
while (c < 101):
    numnodo = prueba.add_nodo()
    c += 1
""" Agregando Arcos """
print(" Agregando Arcos ")
prueba.add_arco(0, 6, 8)
prueba.add_arco(0, 9, 7)
prueba.add_arco(1, 2, 3)
prueba.add_arco(2, 1, 2)
prueba.add_arco(2, 3, 7)
prueba.add_arco(2, 5, 10)
prueba.add_arco(3, 4, 6)
prueba.add_arco(3, 7, 9)
prueba.add_arco(4, 2, 5)
prueba.add_arco(4, 8, 6)
prueba.add_arco(4, 5, 2)
prueba.add_arco(5, 4, 1)
prueba.add_arco(5, 6, 2)
prueba.add_arco(6, 5, 10)
prueba.add_arco(6, 7, 2)
prueba.add_arco(6, 9, 4)
prueba.add_arco(7, 0, 10)
prueba.add_arco(7, 6, 3)
Exemplo n.º 13
0
try:
	archivo = sys.argv[1]	
except IndexError:
	print("ingrese nombre archivo: \n$ python3.x krustal.py nombre_archivo")
	exit()

try:
	modo = sys.argv[2]
except IndexError:
	print("ingrese modo: \n$ python3.x krustal.py nombre_archivo modo")
	exit()


g = leer_grafo(archivo)
grafo = grafo.Grafo(g)

if modo == 'arbol':
	lst = List_Set_T()
elif modo == 'listah':
	lst = List_Set(1)
elif modo == 'lista':
	lst = List_Set()
else:
	print("modo no valido")
	exit()
#ordena por peso
grafo.sort()
#Kruskal
A = set()
ES = grafo.Aristas()
import dados2
import grafo

grafo = grafo.Grafo(dados2.matriz7)

grafo.caminharGrafo()