Beispiel #1
0
class Grafo(object):
    def __init__(self, dirigido=True):
        self.dirigido = dirigido
        self.inicio = Lista()

    def insertar_vertice(self,
                         dato,
                         criterio='info',
                         data=None):  # ! agregar otro
        self.inicio.insertar(
            {
                'info': dato,
                'visitado': False,
                'aristas': Lista(),
                'data': data
            }, criterio)

    def insertar_arista(self,
                        peso,
                        origen,
                        destino,
                        criterio='destino',
                        data=None):  # ! agregar otro
        ver_origen = self.inicio.busqueda(origen, 'info')
        ver_destino = self.inicio.busqueda(destino, 'info')
        if (ver_origen != -1 and ver_destino != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].insertar(
                {
                    'peso': peso,
                    'destino': destino,
                    'data': data
                }, criterio)
            if (not self.dirigido and origen != destino):
                data_aux = deepcopy(data)
                if (data):
                    data_aux['relacion'].reverse()
                self.inicio.obtener_elemento(ver_destino)['aristas'].insertar(
                    {
                        'peso': peso,
                        'destino': origen,
                        'data': data_aux
                    }, criterio)
        else:
            print('los vertices origen o destino no estan en el grafo....',
                  origen, destino)

    def grafo_vacio(self):
        return self.inicio.lista_vacia()

    def tamanio(self):
        return self.inicio.tamanio()

    def buscar_vertice(self, clave, criterio='info'):
        return self.inicio.busqueda(clave, criterio=criterio)

    def buscar_arista(self, origen, destino, criterio='destino'):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            return self.inicio.obtener_elemento(
                ver_origen)['aristas'].busqueda(destino, criterio)
        else:
            return ver_origen

    def barrido_vertices(self):
        self.inicio.barrido()

    def es_adyacente(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            destino = self.buscar_arista(origen, destino)
            if (destino != -1):
                return True
            else:
                return False
        else:
            return False

    def adyacentes(self, origen):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].barrido()

    def eliminar_vertice(self, clave):
        aux = self.inicio.eliminar(clave, criterio='info')
        for posicion in range(self.tamanio()):
            origen = self.inicio.obtener_elemento(posicion)['info']
            self.eliminar_arista(origen, clave)
        return aux

    def eliminar_arista(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].eliminar(
                destino, 'destino')
            if (not self.dirigido):
                ver_destino = self.inicio.busqueda(destino, 'info')
                if (ver_destino != -1):
                    self.inicio.obtener_elemento(
                        ver_destino)['aristas'].eliminar(origen, 'destino')

    def barrido_profundidad(self, ver_origen):
        """Barrido en profundidad del grafo."""
        while (ver_origen < self.inicio.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                print(vertice['info'])
                aristas = 0
                while (aristas < vertice['aristas'].tamanio()):
                    arista = vertice['aristas'].obtener_elemento(aristas)
                    pos_vertice = self.buscar_vertice(arista['destino'])
                    nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                    if (not nuevo_vertice['visitado']):
                        self.barrido_profundidad(pos_vertice)
                    aristas += 1
            ver_origen += 1

    def barrido_amplitud(self, ver_origen):
        """Barrido en amplitud del grafo."""
        cola = Cola()
        while (ver_origen < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                cola.arribo(vertice)
                while (not cola.cola_vacia()):
                    nodo = cola.atencion()
                    print(nodo['info'], nodo['data'])
                    aristas = 0
                    while (aristas < nodo['aristas'].tamanio()):
                        adyacente = nodo['aristas'].obtener_elemento(aristas)
                        pos_vertice = self.buscar_vertice(adyacente['destino'])
                        nuevo_vertice = self.inicio.obtener_elemento(
                            pos_vertice)
                        if (not nuevo_vertice['visitado']):
                            nuevo_vertice['visitado'] = True
                            cola.arribo(nuevo_vertice)
                        aristas += 1
            ver_origen += 1

    def marcar_no_visitado(self):
        """Marca todos losvertices del grafo como no visitados."""
        for i in range(self.tamanio()):
            self.inicio.obtener_elemento(i)['visitado'] = False

    def existe_paso(self, ver_origen, ver_destino):
        """Barrido en profundidad del grafo."""
        resultado = False
        vertice = self.inicio.obtener_elemento(ver_origen)
        if (not vertice['visitado']):
            vertice['visitado'] = True
            aristas = 0
            while (aristas < vertice['aristas'].tamanio() and not resultado):
                arista = vertice['aristas'].obtener_elemento(aristas)
                pos_vertice = self.buscar_vertice(arista['destino'])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                destino = self.inicio.obtener_elemento(ver_destino)
                if (nuevo_vertice['info'] == destino['info']):
                    return True
                else:
                    resultado = self.existe_paso(pos_vertice, ver_destino)
                aristas += 1
        return resultado

    def dijkstra(self, ver_origen, ver_destino):
        """Algoritmo de Dijkstra para hallar el camino mas corto."""
        no_visitados = HeapMin()
        camino = Pila()
        aux = 0
        while (aux < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            vertice_aux = self.inicio.obtener_elemento(aux)
            vertice_aux['anterior'] = None
            if (vertice_aux['info'] == vertice['info']):
                no_visitados.arribo([vertice_aux['info'], None], 0)
            else:
                no_visitados.arribo([vertice_aux['info'], None], inf)
            aux += 1
        while (not no_visitados.vacio()):
            dato = no_visitados.atencion()
            camino.apilar(dato)
            pos_aux = self.buscar_vertice(dato[1][0])
            vertice_aux = self.inicio.obtener_elemento(pos_aux)
            aristas = 0
            while (aristas < vertice_aux['aristas'].tamanio()):
                arista = vertice_aux['aristas'].obtener_elemento(aristas)
                pos_heap = no_visitados.busqueda(arista['destino'])
                if (pos_heap is not None
                        and no_visitados.elementos[pos_heap][0] >
                        dato[0] + arista['peso']):
                    no_visitados.elementos[pos_heap][1][1] = dato[1][0]
                    nuevo_peso = dato[0] + arista['peso']
                    no_visitados.cambiar_prioridad(pos_heap, nuevo_peso)
                aristas += 1
        # print(no_visitados.elementos)
        return camino

    def busqueda_prim(self, bosque, buscado):
        for elemento in bosque:
            if (buscado in elemento[1]):
                return elemento

    def prim(self):
        """Algoritmo de Prim para hallar el árbol de expansión mínimo."""
        bosque = []
        aristas = HeapMin()
        origen = self.inicio.obtener_elemento(0)
        adyac = 0
        while (adyac < origen['aristas'].tamanio()):
            arista = origen['aristas'].obtener_elemento(adyac)
            aristas.arribo([origen['info'], arista['destino']], arista['peso'])
            adyac += 1
        # print(bosque)
        # print(aristas.elementos)
        # print()
        while (len(bosque) // 2 < self.tamanio() and not aristas.vacio()):
            dato = aristas.atencion()
            if (len(bosque) == 0) or (
                (self.busqueda_prim(bosque, dato[1][0]) is not None) ^
                (self.busqueda_prim(bosque, dato[1][1]) is not None)):
                bosque.append(dato)
                pos_vertice = self.buscar_vertice(dato[1][1])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                adyac = 0
                while (adyac < nuevo_vertice['aristas'].tamanio()):
                    arista = nuevo_vertice['aristas'].obtener_elemento(adyac)
                    # print(arista)
                    aristas.arribo([nuevo_vertice['info'], arista['destino']],
                                   arista['peso'])
                    adyac += 1
            # print(bosque)
            # print(aristas.elementos)
            # a = input()
        return bosque
Beispiel #2
0
lista_pers.obtener_elemento(posScarlet)['Nombre'] = 'Scarlet Witch'

#C
for elementos in Personajes_aux:
    lista_aux.insertar(elementos, 'Nombre')

for i in range(0, lista_aux.tamanio()):
    lista_pers.insertar(lista_aux.obtener_elemento(i), 'Nombre')

#D
for i in reversed(range(lista_pers.tamanio())):
    print(lista_pers.obtener_elemento(i))

#E
print('Personaje posicion 7 :', lista_pers.obtener_elemento(7)['Nombre'])

#F
for i in range(0, lista_pers.tamanio()):
    x = lista_pers.obtener_elemento(i)
    if (x['Nombre'][0] == "C"):
        print('Los nombres que empiezan con la letra C son: ', x['Nombre'])

for i in range(0, lista_pers.tamanio()):
    x = lista_pers.obtener_elemento(i)
    if (x['Nombre'][0] == "S"):
        print('Los nombres que empiezan con la letra S son: ', x['Nombre'])

#G
Lista2.barrido()  #barrido año

lista_pers.barrido()
Beispiel #3
0
b. concatenar dos listas en una sola omitiendo los datos repetidos y manteniendo su orden;
c. contar cuántos elementos repetidos hay entre dos listas, es decir la intersección de ambas;[113]
d. eliminar todos los nodos de una lista de a uno a la vez mostrando su contenido """

from lista import Lista
from random import randint
primer_lista = Lista()
segunda_lista = Lista()
lista_concatenada = Lista()

for i in range(5):
    primer_lista.insertar(i) #cargamos las dos listas
    segunda_lista.insertar(randint(1,10))

print('lista uno')
primer_lista.barrido()
print()

print('lista dos')
segunda_lista.barrido()
print()

cont_repetidos = 0

for i in range(primer_lista.tamanio()): #puntoA
    numero = (segunda_lista).obtener_elemento(i)
    primer_lista.insertar(numero)


print('listas concatenadas')
primer_lista.barrido()
Beispiel #4
0
class Grafo(object):
    def __init__(self, dirigido=True):
        self.dirigido = dirigido
        self.inicio = Lista()

    def insertar_vertice(self, dato, criterio='info', data=None):
        self.inicio.insertar(
            {
                'info': dato,
                'visitado': False,
                'aristas': Lista(),
                'data': data
            }, criterio)

    def insertar_arista(self,
                        peso,
                        origen,
                        destino,
                        criterio='destino',
                        data=None):
        ver_origen = self.inicio.busqueda(origen, 'info')
        ver_destino = self.inicio.busqueda(destino, 'info')
        if (ver_origen != -1 and ver_destino != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].insertar(
                {
                    'peso': peso,
                    'destino': destino,
                    'data': data
                }, criterio)
            if (not self.dirigido):
                self.inicio.obtener_elemento(ver_destino)['aristas'].insertar(
                    {
                        'peso': peso,
                        'destino': origen,
                        'data': data
                    }, criterio)

        else:
            print('Los vertices origen o destino no estan en el grafo.',
                  origen, destino)

    def grafo_vacio(self):
        return self.inicio.lista_vacia()

    def tamanio(self):
        return self.inicio.tamanio()

    def buscar_vertice(self, clave, criterio='info'):
        """Devuelve la posicion del vertice buscando la clave dada en la lista de vértices."""
        return self.inicio.busqueda(clave, criterio=criterio)

    def buscar_arista(self, origen, destino, criterio='destino'):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            return self.inicio.obtener_elemento(
                ver_origen)['aristas'].busqueda(destino, criterio)
        else:
            return ver_origen

    def barrido_vertices(self):
        """Realiza un barrido de los vértices del grafo con la información completa de cada uno."""
        self.inicio.barrido()

    def es_adyacente(self, origen, destino):
        """Devuelve si un vertice es adyacente (tiene relacion directa) a otro."""
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            destino = self.buscar_arista(origen, destino)
            if (destino != -1):
                return True
            else:
                return False
        else:
            return False

    def adyacentes(self, origen):
        """Barrido de todos los vertices adyacentes (que tienen relacion directa) a un vertice dado."""
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].barrido()

    def eliminar_vertice(self, clave):
        aux = self.inicio.eliminar(clave, criterio='info')
        for posicion in range(self.tamanio()):
            origen = self.inicio.obtener_elemento(posicion)['info']
            self.eliminar_arista(origen, clave)
        return aux

    def eliminar_arista(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].eliminar(
                destino, 'destino')
            if (not self.dirigido):
                ver_destino = self.inicio.busqueda(destino, 'info')
                if (ver_destino != -1):
                    self.inicio.obtener_elemento(
                        ver_destino)['aristas'].eliminar(origen, 'destino')

    def barrido_profundidad(self, ver_origen):
        """Barrido en profundidad del grafo."""
        while (ver_origen < self.inicio.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                print(vertice['info'])
                aristas = 0
                while (aristas < vertice['aristas'].tamanio()):
                    arista = vertice['aristas'].obtener_elemento(aristas)
                    pos_vertice = self.buscar_vertice(arista['destino'])
                    nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                    if (not nuevo_vertice['visitado']):
                        self.barrido_profundidad(pos_vertice)
                    aristas += 1
            ver_origen += 1

    def barrido_amplitud(self, ver_origen):
        """Barrido en amplitud del grafo."""
        cola = Cola()
        while (ver_origen < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                cola.arribo(vertice)
                while (not cola.cola_vacia()):
                    nodo = cola.atencion()
                    print(nodo['info'])
                    aristas = 0
                    while (aristas < nodo['aristas'].tamanio()):
                        adyacente = nodo['aristas'].obtener_elemento(aristas)
                        pos_vertice = self.buscar_vertice(adyacente['destino'])
                        nuevo_vertice = self.inicio.obtener_elemento(
                            pos_vertice)
                        if (not nuevo_vertice['visitado']):
                            nuevo_vertice['visitado'] = True
                            cola.arribo(nuevo_vertice)
                        aristas += 1
            ver_origen += 1

    def marcar_no_visitado(self):
        for i in range(self.tamanio()):
            self.inicio.obtener_elemento(i)['visitado'] = False

    def existe_paso(self, ver_origen, ver_destino):
        """Devuelve verdadero (true) si es posible ir desde el vértice origen hasta el vértice destino, caso contrario retornará falso (false);"""
        resultado = False
        vertice = self.inicio.obtener_elemento(ver_origen)
        if (not vertice['visitado']):
            vertice['visitado'] = True
            aristas = 0
            while (aristas < vertice['aristas'].tamanio() and not resultado):
                arista = vertice['aristas'].obtener_elemento(aristas)
                pos_vertice = self.buscar_vertice(arista['destino'])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                destino = self.inicio.obtener_elemento(ver_destino)
                if (nuevo_vertice['info'] == destino['info']):
                    return True
                else:
                    resultado = self.existe_paso(pos_vertice, ver_destino)
                aristas += 1
        return resultado

    def dijkstra(self, ver_origen, ver_destino):
        """Algoritmo de Dijkstra para hallar el camino mas corto."""
        no_visitados = HeapMin()
        camino = Pila()
        aux = 0
        while (aux < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            vertice_aux = self.inicio.obtener_elemento(aux)
            vertice_aux['anterior'] = None
            if (vertice_aux['info'] == vertice['info']):
                no_visitados.arribo([vertice_aux['info'], None], 0)
            else:
                no_visitados.arribo([vertice_aux['info'], None], inf)
            aux += 1
        while (not no_visitados.vacio()):
            dato = no_visitados.atencion()
            camino.apilar(dato)
            pos_aux = self.buscar_vertice(dato[1][0])
            vertice_aux = self.inicio.obtener_elemento(pos_aux)
            aristas = 0
            while (aristas < vertice_aux['aristas'].tamanio()):
                arista = vertice_aux['aristas'].obtener_elemento(aristas)
                pos_heap = no_visitados.busqueda(arista['destino'])
                if (pos_heap is not None
                        and no_visitados.elementos[pos_heap][0] >
                        dato[0] + arista['peso']):
                    no_visitados.elementos[pos_heap][1][1] = dato[1][0]
                    nuevo_peso = dato[0] + arista['peso']
                    no_visitados.cambiar_prioridad(pos_heap, nuevo_peso)
                aristas += 1
        # print(no_visitados.elementos)
        return camino

    def busqueda_prim(self, bosque, buscado):
        for elemento in bosque:
            if (buscado in elemento[1]):
                return elemento

    def prim(self, inicio=0):
        """Algoritmo de Prim para hallar el árbol de expansión mínimo."""
        bosque = []
        aristas = HeapMin()
        origen = self.inicio.obtener_elemento(inicio)
        adyac = 0
        while (adyac < origen['aristas'].tamanio()):
            arista = origen['aristas'].obtener_elemento(adyac)
            aristas.arribo([origen['info'], arista['destino']], arista['peso'])
            adyac += 1
        while (len(bosque) // 2 < self.tamanio() and not aristas.vacio()):
            dato = aristas.atencion()
            if (len(bosque) == 0) or (
                (self.busqueda_prim(bosque, dato[1][0]) is not None) ^
                (self.busqueda_prim(bosque, dato[1][1]) is not None)):
                bosque.append(dato)
                pos_vertice = self.buscar_vertice(dato[1][1])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                adyac = 0
                while (adyac < nuevo_vertice['aristas'].tamanio()):
                    arista = nuevo_vertice['aristas'].obtener_elemento(adyac)
                    aristas.arribo([nuevo_vertice['info'], arista['destino']],
                                   arista['peso'])
                    adyac += 1
        return bosque

#! ----- COMIENZO FUNCIONES EJERCICIO 06 GUIA DE EJERCICIOS ----- #!

    def hijos_dios(self, nombre_dios):
        """Devuelve una lista con los hijos del dios dado o None si el dios ingresado no está cargado."""
        hijos = []
        dios = self.buscar_vertice(nombre_dios)
        if (dios != -1):
            aristas = self.inicio.obtener_elemento(dios)['aristas']
            for i in range(aristas.tamanio()):
                elemento = aristas.obtener_elemento(i)
                if (elemento['data'] == 'padre'
                        or elemento['data'] == 'madre'):
                    hijos.append(elemento['destino'])
            return hijos
        else:
            return None

    def familia_dios(self, nombre_dios):
        """Funcion que devuelve tres listas (padres, hijos y hermanos) en base al dios dado,
        o None si el dios ingresado no está cargado."""
        dios = self.buscar_vertice(nombre_dios)
        if (dios != -1):
            padres = []
            hijos = []
            hermanos = []
            aristas = self.inicio.obtener_elemento(dios)['aristas']
            for i in range(aristas.tamanio()):
                elemento = aristas.obtener_elemento(i)
                if (elemento['data'] == 'hijo/a'):
                    padres.append(elemento['destino'])
                elif (elemento['data'] == 'padre'
                      or elemento['data'] == 'madre'):
                    hijos.append(elemento['destino'])
                elif (elemento['data'] == 'hermano/a'):
                    hermanos.append(elemento['destino'])
            return padres, hijos, hermanos
        else:
            return None, None, None

    def relacion_dioses(self, vertice_origen, vertice_destino):
        """Devuelve una lista con la/s relacion/es encontradas entre dos dioses, una lista vacia si no existe relacion."""
        relacion = []
        if (self.es_adyacente(vertice_origen, vertice_destino)):
            dios = self.buscar_vertice(vertice_origen)
            aristas = self.inicio.obtener_elemento(dios)['aristas']
            for i in range(aristas.tamanio()):
                elemento = aristas.obtener_elemento(i)
                if (vertice_destino == elemento['destino']):
                    relacion.append(elemento['data'])
        return relacion

    def madre_dios(self, nombre_dios):
        """Recorre lista de aristas de un dios y devuelve el nombre de su madre, o None si no tiene."""
        dios = self.buscar_vertice(nombre_dios)
        aristas = self.inicio.obtener_elemento(dios)['aristas']
        madre = None
        for i in range(aristas.tamanio()):
            elemento = aristas.obtener_elemento(i)
            if (elemento['data'] == 'hijo/a'):
                pos = self.buscar_vertice(elemento['destino'])
                if (
                        self.inicio.obtener_elemento(
                            pos)['data']['genero'] == 'F'
                ):  #se verifica que el genero sea F para que no muestre al padre
                    madre = elemento['destino']
        return madre  #devuelve None si el dios no tiene madre

    def barrido_profundidad_dioses_madres(self, ver_origen):
        """Barrido en profundidad del grafo mostrando solo a los dioses que tienen madres, utilizando la funcion madre_dios."""
        while (ver_origen < self.inicio.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                madre = self.madre_dios(vertice['info'])
                if (not madre == None
                    ):  #para mostrar unicamente a los dioses que tienen madre
                    print(vertice['info'], ' - Madre:', madre)
                aristas = 0
                while (aristas < vertice['aristas'].tamanio()):
                    arista = vertice['aristas'].obtener_elemento(aristas)
                    pos_vertice = self.buscar_vertice(arista['destino'])
                    nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                    if (not nuevo_vertice['visitado']):
                        self.barrido_profundidad_dioses_madres(pos_vertice)
                    aristas += 1
            ver_origen += 1

    def ancestros_dios(self, nombre_dios, ancestros):
        """Carga en la lista dada los nombres de los ancestros del dios dado."""
        dios = self.buscar_vertice(nombre_dios)
        aristas = self.inicio.obtener_elemento(dios)['aristas']
        for i in range(aristas.tamanio()):
            elemento = aristas.obtener_elemento(i)
            if (elemento['data'] == 'hijo/a'):
                if (elemento['destino'] not in ancestros):
                    ancestros.append(elemento['destino'])
                    self.ancestros_dios(elemento['destino'], ancestros)

    def nietos_dios(self, nombre_dios):
        """Devuelve una lista con los nietos de un dios dado accediendo a los hijos de éste 
        y usando hijos_dios para agregar a los hijos de cada uno a la lista de nietos."""
        nietos = []
        dios = self.buscar_vertice(nombre_dios)
        aristas = self.inicio.obtener_elemento(dios)['aristas']
        for i in range(aristas.tamanio()):
            elemento = aristas.obtener_elemento(i)
            if (elemento['data'] == 'padre' or elemento['data'] == 'madre'):
                hijos = self.hijos_dios(elemento['destino'])
                for i in range(len(hijos)):
                    if hijos[i] not in nietos:
                        nietos.append(hijos[i])
        return nietos
Beispiel #5
0
    },
    {
        'nombre': 'Rocket Racoonn',
        'Año de aparicion': 2014,
        'Heroe': True
    },
    {
        'nombre': 'Loki',
        'Año de aparicion': 2011,
        'Heroe': False
    },
]
for marvel in lista2:
    lista_auxiliar.insertar(marvel, 'nombre')

lista_marvel.barrido()
print()

#punto A
pos = lista_marvel.busqueda('Thor', 'nombre')
if (pos != -1):
    print('Thor esta en la posicion', pos)
else:
    print('Thor no esta en la lista')

print()
#punto B
pos = lista_marvel.busqueda('Scalet Witch', 'nombre')
if (pos != -1):
    lista_marvel.obtener_elemento(pos)['nombre'] = 'Scarlet Witch'
print()
Beispiel #6
0
class Grafo(object):
    def __init__(self, dirigido=True):
        self.dirigido = dirigido
        self.inicio = Lista()

    def insertar_vertice(self, dato, criterio='info', data=None):
        self.inicio.insertar(
            {
                'info': dato,
                'visitado': False,
                'aristas': Lista(),
                'data': data
            }, criterio)

    def insertar_arista(self,
                        peso,
                        origen,
                        destino,
                        criterio='destino',
                        data=None):
        ver_origen = self.inicio.busqueda(origen, 'info')
        ver_destino = self.inicio.busqueda(destino, 'info')
        if (ver_origen != -1 and ver_destino != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].insertar(
                {
                    'peso': peso,
                    'destino': destino,
                    'data': data
                }, criterio)
            if (not self.dirigido):
                self.inicio.obtener_elemento(ver_destino)['aristas'].insertar(
                    {
                        'peso': peso,
                        'destino': origen,
                        'data': data
                    }, criterio)

        else:
            print('Los vertices origen o destino no estan en el grafo.',
                  origen, destino)

    def grafo_vacio(self):
        return self.inicio.lista_vacia()

    def tamanio(self):
        return self.inicio.tamanio()

    def buscar_vertice(self, clave, criterio='info'):
        return self.inicio.busqueda(clave, criterio=criterio)

    def buscar_arista(self, origen, destino, criterio='destino'):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            return self.inicio.obtener_elemento(
                ver_origen)['aristas'].busqueda(destino, criterio)
        else:
            return ver_origen

    def barrido_vertices(self):
        self.inicio.barrido()

    def es_adyacente(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            destino = self.buscar_arista(origen, destino)
            if (destino != -1):
                return True
            else:
                return False
        else:
            return False

    def adyacentes(self, origen):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].barrido()

    def eliminar_vertice(self, clave):
        aux = self.inicio.eliminar(clave, criterio='info')
        for posicion in range(self.tamanio()):
            origen = self.inicio.obtener_elemento(posicion)['info']
            self.eliminar_arista(origen, clave)
        return aux

    def eliminar_arista(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].eliminar(
                destino, 'destino')
            if (not self.dirigido):
                ver_destino = self.inicio.busqueda(destino, 'info')
                if (ver_destino != -1):
                    self.inicio.obtener_elemento(
                        ver_destino)['aristas'].eliminar(origen, 'destino')

    def barrido_profundidad(self, ver_origen):
        while (ver_origen < self.inicio.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                print(vertice['info'])
                aristas = 0
                while (aristas < vertice['aristas'].tamanio()):
                    arista = vertice['aristas'].obtener_elemento(aristas)
                    pos_vertice = self.buscar_vertice(arista['destino'])
                    nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                    if (not nuevo_vertice['visitado']):
                        self.barrido_profundidad(pos_vertice)
                    aristas += 1
            ver_origen += 1

    def barrido_amplitud(self, ver_origen):
        cola = Cola()
        while (ver_origen < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                cola.arribo(vertice)
                while (not cola.cola_vacia()):
                    nodo = cola.atencion()
                    print(nodo['info'])
                    aristas = 0
                    while (aristas < nodo['aristas'].tamanio()):
                        adyacente = nodo['aristas'].obtener_elemento(aristas)
                        pos_vertice = self.buscar_vertice(adyacente['destino'])
                        nuevo_vertice = self.inicio.obtener_elemento(
                            pos_vertice)
                        if (not nuevo_vertice['visitado']):
                            nuevo_vertice['visitado'] = True
                            cola.arribo(nuevo_vertice)
                        aristas += 1
            ver_origen += 1

    def marcar_no_visitado(self):
        for i in range(self.tamanio()):
            self.inicio.obtener_elemento(i)['visitado'] = False

    def existe_paso(self, ver_origen, ver_destino):
        resultado = False
        vertice = self.inicio.obtener_elemento(ver_origen)
        if (not vertice['visitado']):
            vertice['visitado'] = True
            aristas = 0
            while (aristas < vertice['aristas'].tamanio() and not resultado):
                arista = vertice['aristas'].obtener_elemento(aristas)
                pos_vertice = self.buscar_vertice(arista['destino'])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                destino = self.inicio.obtener_elemento(ver_destino)
                if (nuevo_vertice['info'] == destino['info']):
                    return True
                else:
                    resultado = self.existe_paso(pos_vertice, ver_destino)
                aristas += 1
        return resultado

    def dijkstra(self, ver_origen, ver_destino):
        no_visitados = HeapMin()
        camino = Pila()
        aux = 0
        while (aux < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            vertice_aux = self.inicio.obtener_elemento(aux)
            vertice_aux['anterior'] = None
            if (vertice_aux['info'] == vertice['info']):
                no_visitados.arribo([vertice_aux['info'], None], 0)
            else:
                no_visitados.arribo([vertice_aux['info'], None], inf)
            aux += 1
        while (not no_visitados.vacio()):
            dato = no_visitados.atencion()
            camino.apilar(dato)
            pos_aux = self.buscar_vertice(dato[1][0])
            vertice_aux = self.inicio.obtener_elemento(pos_aux)
            aristas = 0
            while (aristas < vertice_aux['aristas'].tamanio()):
                arista = vertice_aux['aristas'].obtener_elemento(aristas)
                pos_heap = no_visitados.busqueda(arista['destino'])
                if (pos_heap is not None
                        and no_visitados.elementos[pos_heap][0] >
                        dato[0] + arista['peso']):
                    no_visitados.elementos[pos_heap][1][1] = dato[1][0]
                    nuevo_peso = dato[0] + arista['peso']
                    no_visitados.cambiar_prioridad(pos_heap, nuevo_peso)
                aristas += 1
        return camino

    def busqueda_prim(self, bosque, buscado):
        for elemento in bosque:
            if (buscado in elemento[1]):
                return elemento

    def prim(self, inicio=0):
        bosque = []
        aristas = HeapMin()
        origen = self.inicio.obtener_elemento(inicio)
        adyac = 0
        while (adyac < origen['aristas'].tamanio()):
            arista = origen['aristas'].obtener_elemento(adyac)
            aristas.arribo([origen['info'], arista['destino']], arista['peso'])
            adyac += 1
        while (len(bosque) // 2 < self.tamanio() and not aristas.vacio()):
            dato = aristas.atencion()
            if (len(bosque) == 0) or (
                (self.busqueda_prim(bosque, dato[1][0]) is not None) ^
                (self.busqueda_prim(bosque, dato[1][1]) is not None)):
                bosque.append(dato)
                pos_vertice = self.buscar_vertice(dato[1][1])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                adyac = 0
                while (adyac < nuevo_vertice['aristas'].tamanio()):
                    arista = nuevo_vertice['aristas'].obtener_elemento(adyac)
                    aristas.arribo([nuevo_vertice['info'], arista['destino']],
                                   arista['peso'])
                    adyac += 1
        return bosque

    def camino_mas_corto(self, ver_origen, ver_destino):
        vertice_origen = self.buscar_vertice(ver_destino)
        vertice_destino = self.buscar_vertice(ver_origen)
        pila_camino = self.dijkstra(vertice_origen, vertice_destino)
        destino = ver_origen
        costo = None
        print('El camino mas corto desde', ver_origen, 'a', ver_destino, 'es:')
        while (not pila_camino.pila_vacia()):
            dato = pila_camino.desapilar()
            if (dato[1][0] == destino):
                if (costo is None):
                    costo = dato[0]
                print(' - ', dato[1][0])
                destino = dato[1][1]
        print('El costo total del camino es:', costo)

    def arbol_expansion_minimo(self, vertice_origen=0):
        bosque = self.prim(vertice_origen)
        peso = 0
        print('Arbol de expansion minimo:')
        for elemento in bosque:
            print(' ', elemento[1][0], '-', elemento[1][1])
            peso += elemento[0]
        print('El costo total es', peso)
        print()
lista2 = Lista()
lista_concatenada = Lista()

for i in range(0, 10):
    lista1.insertar(i)

for i in range(0, 10):
    lista2.insertar(i * 2)

for i in range(lista1.tamanio()):
    lista_concatenada.insertar(lista1.obtener_elemento(i))
for i in range(lista2.tamanio()):
    lista_concatenada.insertar(lista2.obtener_elemento(i))

print('Listas concatenadas:')
lista_concatenada.barrido()
print()

cont_repetido = 0
for i in range(lista2.tamanio()):
    elemento = lista2.obtener_elemento(i)
    pos = lista1.busqueda(elemento)
    if pos == -1:
        lista1.insertar(elemento)
    else:
        cont_repetido += 1

print('Listas concatenadas sin valores repetidos:')
lista1.barrido()
print()
Beispiel #8
0
for personaje in personajes:
    lista1.insertar(personaje)

for personaje in personajes_auxiliar:
    if (lista1.busqueda(personaje) == -1):
        lista1.insertar(personaje)

posicion_thor = lista1.busqueda('Thor')
if (posicion_thor != -1):
    print('Thor se encuentra en la posicion numero', posicion_thor,
          'de la lista')

posicion = lista1.busqueda('Scalet Witch')
lista1.modificar_elemento(posicion, 'Scarlet Witch')

lista1.barrido()  # Punto D

lista1.barrido_inverso()  # Punto D

lista1.obtener_elemento(7)  # Punto E
lista1.barrido_iniciales()  # Punto F

personajes_completos = [{
    'name': 'Thor',
    'año': 1983,
    'heroe': True
}, {
    'name': 'Iron Man',
    'año': 1970,
    'heroe': True
}, {
Beispiel #9
0
#a
posicionthor = lista_personajes.busqueda('Thor','name')
if (posicionthor != -1):
    print ('Thor esta en la posicion ',posicionthor)
else:
    print ('Thor no esta en la lista')
    

#b
posScalet= lista_personajes.busqueda('Scalet Witch','name')
lista_personajes.obtener_elemento(posScalet)['name']= 'Scarlet Witch'



#d Ascendente
lista_personajes.barrido()
print("----------------------------------")
lista_personajes.barrido_Descendente()
print('------------------------------------')

#e
while(not lista_personajes.lista_vacia()):
    print(lista_personajes.(lista_personajes.obtener_elemento(7))
#f
for i in range(0,lista_personajes.tamanio()):
    x = lista_personajes.obtener_elemento(i)
    if (x['name'][0]=="C" or x['name'][0]=="S"):
        print('Los nombres que empiezan con la letra C o S son: ',x['name'])


personajes_2 = [
     ]
for personaje in lista1:
    lista_personaje.insertar(personaje,'name')


lista_auxiliar = [
        {'name': 'Black Widow','Año de aparicion': 1989, 'Heroe': True},
        {'name': 'Hulk','Año de aparicion': 1939, 'Heroe': True},
        {'name': 'Rocket Racoonn','Año de aparicion': 1950, 'Heroe': True},
        {'name': 'Loki','Año de aparicion': 500, 'Heroe': False},
     ]

for personaje in lista_auxiliar:
    lista_personaje.insertar(personaje,'name')

lista_personaje.barrido()
print()

# #punto a
# pos = lista_personaje.busqueda('Thor','name')
# if (pos != -1):
#    print('Thor esta en la posicion: ', pos,' de la lista')
# print()

###punto b
# pos2 = lista_personaje.busqueda('Scalet Witch','name')
# if (pos2 != -1):
#     lista_personaje.obtener_elemento(pos2)['name'] = 'Scarlet Witch'
# print()

###punto d 
Beispiel #11
0
class Grafo(object):
    def __init__(self, dirigido=True):
        self.dirigido = dirigido
        self.inicio = Lista()

    def insertar_vertice(self,
                         dato,
                         criterio='info',
                         data=None):  # ! agregar otro
        self.inicio.insertar(
            {
                'info': dato,
                'visitado': False,
                'aristas': Lista(),
                'data': data
            }, criterio)

    def insertar_arista(self,
                        peso,
                        origen,
                        destino,
                        criterio='destino',
                        data=None):  # ! agregar otro
        ver_origen = self.inicio.busqueda(origen, 'info')
        ver_destino = self.inicio.busqueda(destino, 'info')
        if (ver_origen != -1 and ver_destino != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].insertar(
                {
                    'peso': peso,
                    'destino': destino,
                    'data': data
                }, criterio)
            if (not self.dirigido and origen != destino):
                data_aux = deepcopy(data)
                if (data):
                    data_aux['relacion'].reverse()
                self.inicio.obtener_elemento(ver_destino)['aristas'].insertar(
                    {
                        'peso': peso,
                        'destino': origen,
                        'data': data_aux
                    }, criterio)
        else:
            print('los vertices origen o destino no estan en el grafo....',
                  origen, destino)

    def grafo_vacio(self):
        return self.inicio.lista_vacia()

    def tamanio(self):
        return self.inicio.tamanio()

    def buscar_vertice(self, clave, criterio='info'):
        return self.inicio.busqueda(clave, criterio=criterio)

    def buscar_arista(self, origen, destino, criterio='destino'):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            return self.inicio.obtener_elemento(
                ver_origen)['aristas'].busqueda(destino, criterio)
        else:
            return ver_origen

    def barrido_vertices(self):
        self.inicio.barrido()

    def es_adyacente(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            destino = self.buscar_arista(origen, destino)
            if (destino != -1):
                return True
            else:
                return False
        else:
            return False

    def adyacentes(self, origen):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].barrido()

    def eliminar_vertice(self, clave):
        aux = self.inicio.eliminar(clave, criterio='info')
        for posicion in range(self.tamanio()):
            origen = self.inicio.obtener_elemento(posicion)['info']
            self.eliminar_arista(origen, clave)
        return aux

    def eliminar_arista(self, origen, destino):
        ver_origen = self.inicio.busqueda(origen, 'info')
        if (ver_origen != -1):
            self.inicio.obtener_elemento(ver_origen)['aristas'].eliminar(
                destino, 'destino')
            if (not self.dirigido):
                ver_destino = self.inicio.busqueda(destino, 'info')
                if (ver_destino != -1):
                    self.inicio.obtener_elemento(
                        ver_destino)['aristas'].eliminar(origen, 'destino')

    def barrido_profundidad(self, ver_origen):
        """Barrido en profundidad del grafo."""
        while (ver_origen < self.inicio.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                print(vertice['info'])
                aristas = 0
                while (aristas < vertice['aristas'].tamanio()):
                    arista = vertice['aristas'].obtener_elemento(aristas)
                    pos_vertice = self.buscar_vertice(arista['destino'])
                    nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                    if (not nuevo_vertice['visitado']):
                        self.barrido_profundidad(pos_vertice)
                    aristas += 1
            ver_origen += 1

    def barrido_amplitud(self, ver_origen):
        """Barrido en amplitud del grafo."""
        cola = Cola()
        while (ver_origen < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            if (not vertice['visitado']):
                vertice['visitado'] = True
                cola.arribo(vertice)
                while (not cola.cola_vacia()):
                    nodo = cola.atencion()
                    print(nodo['info'], nodo['data'])
                    aristas = 0
                    while (aristas < nodo['aristas'].tamanio()):
                        adyacente = nodo['aristas'].obtener_elemento(aristas)
                        pos_vertice = self.buscar_vertice(adyacente['destino'])
                        nuevo_vertice = self.inicio.obtener_elemento(
                            pos_vertice)
                        if (not nuevo_vertice['visitado']):
                            nuevo_vertice['visitado'] = True
                            cola.arribo(nuevo_vertice)
                        aristas += 1
            ver_origen += 1

    def marcar_no_visitado(self):
        """Marca todos los vertices del grafo como no visitados."""
        for i in range(self.tamanio()):
            self.inicio.obtener_elemento(i)['visitado'] = False

    def existe_paso(self, ver_origen, ver_destino):
        """Barrido en profundidad del grafo."""
        resultado = False
        vertice = self.inicio.obtener_elemento(ver_origen)
        if (not vertice['visitado']):
            vertice['visitado'] = True
            aristas = 0
            while (aristas < vertice['aristas'].tamanio() and not resultado):
                arista = vertice['aristas'].obtener_elemento(aristas)
                pos_vertice = self.buscar_vertice(arista['destino'])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                destino = self.inicio.obtener_elemento(ver_destino)
                if (nuevo_vertice['info'] == destino['info']):
                    return True
                else:
                    resultado = self.existe_paso(pos_vertice, ver_destino)
                aristas += 1
        return resultado

    def dijkstra(self, ver_origen):
        """Algoritmo de Dijkstra para hallar el camino mas corto."""
        no_visitados = HeapMin()
        camino = Pila()
        aux = 0
        while (aux < self.tamanio()):
            vertice = self.inicio.obtener_elemento(ver_origen)
            vertice_aux = self.inicio.obtener_elemento(aux)
            vertice_aux['anterior'] = None
            if (vertice_aux['info'] == vertice['info']):
                no_visitados.arribo([vertice_aux['info'], None], 0)
            else:
                no_visitados.arribo([vertice_aux['info'], None], inf)
            aux += 1
        while (not no_visitados.vacio()):
            dato = no_visitados.atencion()
            camino.apilar(dato)
            pos_aux = self.buscar_vertice(dato[1][0])
            vertice_aux = self.inicio.obtener_elemento(pos_aux)
            aristas = 0
            while (aristas < vertice_aux['aristas'].tamanio()):
                arista = vertice_aux['aristas'].obtener_elemento(aristas)
                pos_heap = no_visitados.busqueda(arista['destino'])
                if (pos_heap is not None
                        and no_visitados.elementos[pos_heap][0] >
                        dato[0] + arista['peso']):
                    no_visitados.elementos[pos_heap][1][1] = dato[1][0]
                    nuevo_peso = dato[0] + arista['peso']
                    no_visitados.cambiar_prioridad(pos_heap, nuevo_peso)
                aristas += 1
        # print(no_visitados.elementos)
        return camino

    def busqueda_prim(self, bosque, buscado):
        for elemento in bosque:
            if (buscado in elemento[1]):
                return elemento

    def prim(self, inicio=0):
        """Algoritmo de Prim para hallar el árbol de expansión mínimo."""
        bosque = []
        aristas = HeapMin()
        origen = self.inicio.obtener_elemento(inicio)
        adyac = 0
        while (adyac < origen['aristas'].tamanio()):
            arista = origen['aristas'].obtener_elemento(adyac)
            aristas.arribo([origen['info'], arista['destino']], arista['peso'])
            adyac += 1
        # print(bosque)
        # print(aristas.elementos)
        # print()
        while (len(bosque) // 2 < self.tamanio() and not aristas.vacio()):
            dato = aristas.atencion()
            if (len(bosque) == 0) or (
                (self.busqueda_prim(bosque, dato[1][0]) is not None) ^
                (self.busqueda_prim(bosque, dato[1][1]) is not None)):
                bosque.append(dato)
                pos_vertice = self.buscar_vertice(dato[1][1])
                nuevo_vertice = self.inicio.obtener_elemento(pos_vertice)
                adyac = 0
                while (adyac < nuevo_vertice['aristas'].tamanio()):
                    arista = nuevo_vertice['aristas'].obtener_elemento(adyac)
                    # print(arista)
                    aristas.arribo([nuevo_vertice['info'], arista['destino']],
                                   arista['peso'])
                    adyac += 1
            # print(bosque)
            # print(aristas.elementos)
            # a = input()
        return bosque

# grafo = Grafo()
# grafo.insertar_vertice('A')
# grafo.insertar_vertice('C')
# grafo.insertar_vertice('B')
# grafo.insertar_vertice('F')
# grafo.insertar_vertice('Z')
# grafo.insertar_vertice('X')

# grafo.insertar_arista(5, 'A', 'B')
# grafo.insertar_arista(2, 'C', 'B')
# grafo.insertar_arista(3, 'B', 'C')
# grafo.insertar_arista(9, 'A', 'F')
# grafo.insertar_arista(5, 'B', 'F')
# grafo.insertar_arista(13, 'F', 'X')
# grafo.insertar_arista(7, 'X', 'Z')
# grafo.insertar_arista(5, 'C', 'X')
# vertice_destino = grafo.buscar_vertice('Z')
# vertice_origen = grafo.buscar_vertice('A')

# bosque = grafo.prim()
# print('arbol de expansion')
# peso = 0
# for elemento in bosque:
#     print(elemento[1][0], '-', elemento[1][1])
#     peso += elemento[0]
# print('costo total', peso)
# pila_camino = grafo.dijkstra(vertice_origen, vertice_destino)

# destino = 'Z'
# costo = None
# while(not pila_camino.pila_vacia()):
#     dato = pila_camino.desapilar()
#     if(dato[1][0] == destino):
#         if(costo is None):
#             costo = dato[0]
#         print(dato[1][0])
#         destino = dato[1][1]
# print('el costo total del camino es:', costo)
# print(grafo.existe_paso(vertice_origen, vertice_destino))
# grafo.barrido_profundidad(vertice_origen)
# grafo.marcar_no_visitado()
# print()
# vertice_origen = grafo.buscar_vertice('F')
# grafo.barrido_amplitud(vertice_origen)

# grafo.insertar_arista(100, 'B', 'B')

# grafo.inicio.obtener_elemento(0)['aristas'].barrido()
# print()
# grafo.inicio.obtener_elemento(1)['aristas'].barrido()

# grafo.barrido_vertices()

# print(grafo.es_adyacente('A', 'F'))
# print(grafo.es_adyacente('A', 'C'))
# # print(grafo.eliminar_vertice('B'))
# print()
# grafo.barrido_vertices()
# print()
# grafo.eliminar_arista('A', 'B')
# grafo.adyacentes('A')
# print()
# grafo.adyacentes('F')
# print()
# grafo.adyacentes('B')

# print(grafo.buscar_vertice('F'))
# print(grafo.buscar_vertice('B'))

# print(grafo.buscar_arista('B','A'))
# print(grafo.buscar_arista('A','A'))

    def cargar_dioses(self):
        self.insertar_vertice('Gaia')
        self.insertar_vertice('Urano')

        self.insertar_vertice('Themis')
        self.insertar_vertice('Minemosyne')
        self.insertar_vertice('Hyperion')
        self.insertar_vertice('Theia')
        self.insertar_vertice('Crios')
        self.insertar_vertice('Cronos')
        self.insertar_vertice('Rhea')
        self.insertar_vertice('Kdios')
        self.insertar_vertice('Phoibe')
        self.insertar_vertice('Iapetos')
        self.insertar_vertice('Okeanos')
        self.insertar_vertice('Tedds')

        self.insertar_vertice('Helios')
        self.insertar_vertice('Eos')
        self.insertar_vertice('Selene')
        self.insertar_vertice('Prometheus')
        self.insertar_vertice('Epimetheus')
        self.insertar_vertice('Atlas')
        self.insertar_vertice('Pleione')

        self.insertar_vertice('Hades')
        self.insertar_vertice('Demeter')
        self.insertar_vertice('Poseidon')
        self.insertar_vertice('Hestia')
        self.insertar_vertice('Hera')
        self.insertar_vertice('Zeus')
        self.insertar_vertice('Leto')
        self.insertar_vertice('Semelle')
        self.insertar_vertice('Maia')

        self.insertar_vertice('Persephone')
        self.insertar_vertice('Aphrodite')
        self.insertar_vertice('Ares')
        self.insertar_vertice('Hephaistos')
        self.insertar_vertice('Athena')
        self.insertar_vertice('Apollo')
        self.insertar_vertice('Artemis')
        self.insertar_vertice('Dionysos')
        self.insertar_vertice('Hermes')
        self.insertar_vertice('Penelopeia')

        self.insertar_vertice('Phobos')
        self.insertar_vertice('Deimos')
        self.insertar_vertice('Eros')
        self.insertar_vertice('Himeros')

        self.insertar_vertice('Hermaphrodite')
        self.insertar_vertice('Pan')

        self.insertar_arista(1,
                             'Urano',
                             'Gaia',
                             data={'relacion': ['hijo', 'madre', 'pareja']})

        self.insertar_arista(1,
                             'Urano',
                             'Themis',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Hyperion',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Theia',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Crios',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Cronos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Rhea',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Iapetos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Okeanos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Urano',
                             'Tedds',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Gaia',
                             'Themis',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Hyperion',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Theia',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Crios',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Cronos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Rhea',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Iapetos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Okeanos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Gaia',
                             'Tedds',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Hyperion',
                             'Theia',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Hyperion',
                             'Helios',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Eos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Selene',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Theia',
                             'Helios',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Theia',
                             'Eos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Theia',
                             'Selene',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Iapetos',
                             'Prometheus',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Iapetos',
                             'Epimetheus',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Iapetos',
                             'Atlas',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Okeanos',
                             'Tedds',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Okeanos',
                             'Pleione',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Tedds',
                             'Pleione',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Cronos',
                             'Rhea',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Cronos',
                             'Hades',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Cronos',
                             'Demeter',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Cronos',
                             'Poseidon',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Cronos',
                             'Hestia',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Cronos',
                             'Hera',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Cronos',
                             'Zeus',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Rhea',
                             'Hades',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Rhea',
                             'Demeter',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Rhea',
                             'Poseidon',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Rhea',
                             'Hestia',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Rhea',
                             'Hera',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Rhea',
                             'Zeus',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Kdios',
                             'Phoibe',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Kdios',
                             'Leto',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Phoibe',
                             'Leto',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Atlas',
                             'Pleione',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Atlas',
                             'Maia',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Pleione',
                             'Maia',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Demeter',
                             'Zeus',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Demeter',
                             'Persephone',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Zeus',
                             'Persephone',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Hera',
                             'Zeus',
                             data={'relacion': ['pareja', 'hermano']})

        self.insertar_arista(1,
                             'Hera',
                             'Ares',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Hera',
                             'Hephaistos',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Zeus',
                             'Ares',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Zeus',
                             'Hephaistos',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Zeus',
                             'Athena',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1, 'Zeus', 'Leto', data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Zeus',
                             'Apollo',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Zeus',
                             'Artemis',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Leto',
                             'Apollo',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Leto',
                             'Artemis',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Zeus',
                             'Semelle',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Zeus',
                             'Dionysos',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Semelle',
                             'Dionysos',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1, 'Zeus', 'Maia', data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Zeus',
                             'Hermes',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Maia',
                             'Hermes',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Hades',
                             'Persephone',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Aphrodite',
                             'Ares',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Aphrodite',
                             'Phobos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Aphrodite',
                             'Deimos',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Aphrodite',
                             'Eros',
                             data={'relacion': ['padre', 'hijo']})
        self.insertar_arista(1,
                             'Aphrodite',
                             'Himeros',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Ares',
                             'Phobos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Ares',
                             'Deimos',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Ares',
                             'Eros',
                             data={'relacion': ['madre', 'hijo']})
        self.insertar_arista(1,
                             'Ares',
                             'Himeros',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Aphrodite',
                             'Hephaistos',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Aphrodite',
                             'Hermes',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Aphrodite',
                             'Hermaphrodite',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Hermes',
                             'Hermaphrodite',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Hermes',
                             'Penelopeia',
                             data={'relacion': ['pareja']})

        self.insertar_arista(1,
                             'Hermes',
                             'Pan',
                             data={'relacion': ['padre', 'hijo']})

        self.insertar_arista(1,
                             'Penelopeia',
                             'Pan',
                             data={'relacion': ['madre', 'hijo']})

        self.insertar_arista(1,
                             'Themis',
                             'Minemosyne',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Hyperion',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Theia',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Crios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Cronos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Rhea',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Kdios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Themis',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Minemosyne',
                             'Hyperion',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Theia',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Crios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Cronos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Rhea',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Kdios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Minemosyne',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Hyperion',
                             'Crios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Cronos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Rhea',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Kdios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hyperion',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Theia',
                             'Cronos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Rhea',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Kdios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Theia',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Cronos',
                             'Rhea',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Cronos',
                             'Kdios',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Cronos',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Cronos',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Cronos',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Cronos',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Kdios',
                             'Phoibe',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Kdios',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Kdios',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Kdios',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Phoibe',
                             'Iapetos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Phoibe',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Phoibe',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Iapetos',
                             'Okeanos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Iapetos',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Okeanos',
                             'Tedds',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Helios',
                             'Eos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Helios',
                             'Selene',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Eos',
                             'Selene',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Prometheus',
                             'Epimetheus',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Prometheus',
                             'Atlas',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Epimetheus',
                             'Atlas',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Hades',
                             'Demeter',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hades',
                             'Poseidon',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hades',
                             'Hestia',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hades',
                             'Hera',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hades',
                             'Zeus',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Demeter',
                             'Poseidon',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Demeter',
                             'Hestia',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Demeter',
                             'Hera',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Poseidon',
                             'Hestia',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Poseidon',
                             'Hera',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Poseidon',
                             'Zeus',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Hestia',
                             'Hera',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Hestia',
                             'Zeus',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Ares',
                             'Hephaistos',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Apollo',
                             'Artemis',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Phobos',
                             'Deimos',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Phobos',
                             'Eros',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Phobos',
                             'Himeros',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Deimos',
                             'Eros',
                             data={'relacion': ['hermano']})
        self.insertar_arista(1,
                             'Deimos',
                             'Himeros',
                             data={'relacion': ['hermano']})

        self.insertar_arista(1,
                             'Eros',
                             'Himeros',
                             data={'relacion': ['hermano']})
Beispiel #12
0
from random import randint

lista_vocales = Lista()
lista_num = Lista()
lista_par = Lista()
lista_impar = Lista()
lista_personas = Lista()
lista_uno = Lista()
lista_dos = Lista()

for i in range(5):
    lista_uno.insertar(i)
    lista_dos.insertar(randint(1, 10))

print('lista uno')
lista_uno.barrido()
print()
print('lista dos')
lista_dos.barrido()
print()

for i in range(lista_dos.tamanio()):
    num = lista_dos.obtener_elemento(i)
    if (lista_uno.busqueda(num) == -1):
        lista_uno.insertar(num)

lista_uno.barrido()

for i in range(20):
    lista_num.insertar(randint(1, 999))
# Ejercicio 3

from lista import Lista

personajes = [
    "Hulk", "Black Widow", "Spider Man", "Thor", "Capitan America",
    "Scalet Witch"
]
lista_auxiliar = ["Black Widow", "Hulk", "Rocket Racoon", "Loki"]
lista_personajes = Lista()

for personaje in personajes:
    lista_personajes.insertar(personaje)

lista_personajes.barrido()
print()
print("Thor se encuentra en la posicion: ",
      lista_personajes.busqueda("Thor"))  #Punto A
print()

lista_personajes.modificar_elemento(lista_personajes.busqueda("Scalet Witch"),
                                    "Scarlet Witch")  #Punto B

lista_personajes.barrido()

print()
for personaje in lista_auxiliar:  # Punto C
    if (lista_personajes.busqueda(personaje) == -1):
        lista_personajes.insertar(personaje)

print("Nueva lista con personajes auxiliares agregados:")