"""
Consideremos este grafo no dirigido:
0 --- 1 --- 2
|
|
3
"""
V = 4 # Cantidad de nodos (vertices)
# Creamos Lista de adyacencia
adj_list = [[]*V for _ in range(V)]
print("Lista de adyacencia antes de:")
for i in adj_list: print(i)
# Agregamos aristas (lista de vecinos)
adj_list[0].append(1)
adj_list[1].append(0) # no dirigido (bidireccional)
adj_list[1].append(2)
adj_list[2].append(1) # no dirigido (bidireccional)
adj_list[1].append(3)
adj_list[3].append(1) # no dirigido (bidireccional)
print("Lista de adyacencia despues de:")
for i in adj_list: print(i)
# Buscar arista (a,b) es O(n)
a = 0
b = 3
exists = False
for node in adj_list[a]:
if node == b:
exists = True
print("Existe arista de A hasta B?", exists)
IiIiCkNvbnNpZGVyZW1vcyBlc3RlIGdyYWZvIG5vIGRpcmlnaWRvOgoKCTAgLS0tIDEgLS0tIDIKCQkgIHwKCQkgIHwKCQkgIDMKIiIiCgpWID0gNAkjIENhbnRpZGFkIGRlIG5vZG9zICh2ZXJ0aWNlcykKCiMgQ3JlYW1vcyBMaXN0YSBkZSBhZHlhY2VuY2lhCmFkal9saXN0ID0gW1tdKlYgZm9yIF8gaW4gcmFuZ2UoVildCgpwcmludCgiTGlzdGEgZGUgYWR5YWNlbmNpYSBhbnRlcyBkZToiKQpmb3IgaSBpbiBhZGpfbGlzdDogcHJpbnQoaSkKCiMgQWdyZWdhbW9zIGFyaXN0YXMgKGxpc3RhIGRlIHZlY2lub3MpCmFkal9saXN0WzBdLmFwcGVuZCgxKQphZGpfbGlzdFsxXS5hcHBlbmQoMCkgIyBubyBkaXJpZ2lkbyAoYmlkaXJlY2Npb25hbCkKCmFkal9saXN0WzFdLmFwcGVuZCgyKQphZGpfbGlzdFsyXS5hcHBlbmQoMSkgIyBubyBkaXJpZ2lkbyAoYmlkaXJlY2Npb25hbCkKCmFkal9saXN0WzFdLmFwcGVuZCgzKQphZGpfbGlzdFszXS5hcHBlbmQoMSkgIyBubyBkaXJpZ2lkbyAoYmlkaXJlY2Npb25hbCkKCnByaW50KCJMaXN0YSBkZSBhZHlhY2VuY2lhIGRlc3B1ZXMgZGU6IikKZm9yIGkgaW4gYWRqX2xpc3Q6IHByaW50KGkpCgojIEJ1c2NhciBhcmlzdGEgKGEsYikgZXMgTyhuKQphID0gMApiID0gMwpleGlzdHMgPSBGYWxzZQpmb3Igbm9kZSBpbiBhZGpfbGlzdFthXToKCWlmIG5vZGUgPT0gYjoKCQlleGlzdHMgPSBUcnVlCnByaW50KCJFeGlzdGUgYXJpc3RhIGRlIEEgaGFzdGEgQj8iLCBleGlzdHMpCgo=