# Dictionary vagy magyarul szótár formában tárolt gráf!
# A szótár struktúra lényege, hogy egy azonosító ("szó") és annak jelentése adott.
# Pl. az alábbiban:  graph[0] azonos a [(1,7), (3, 5)] listával
# Gyakorlatilag a "szó" (pl. 0) indexeli a graph szótárt
graph = {0: [(1, 7), (3, 5)],
         1: [(0, 7), (2, 8), (3, 9), (4, 7)],
         2: [(1, 8), (4, 5)],
         3: [(0, 5), (1, 9), (4, 15), (5, 6)],
         4: [(1, 7), (2, 5), (3, 15), (5, 8), (6, 9)],
         5: [(3, 6), (4, 8), (6, 11)],
         6: [(4, 9), (5, 11)]}

# Csúcsmátrix formába írjuk át a szótárt
# Célszerű a csúcsokat 0-tól kezdődően megnevezni, a Python  indexelése miatt
# (Tudjuk, ugye, hogy mindig nullától indulnak az indexek!)
# A mátrix most 7x7-es lesz!
matrix = []

for i in range(len(graph)):
    # len(graph) most 7, mivel 7 bejegyzés van a szótárban
    sor = [0] * len(graph)  # sor feltöltése 7 nullával
    for j in range(len(graph[i])):
        # A szótár aktuális bejegyzésének feldolgozása
        (p, e) = graph[i][j]
        # A szótár i. bejegyzésének j. eleme egy számpár
        sor[p] = e
        # p a gráf egy pontja, e az él "súlya" - ezért célszerű
        # a pontokat indexesen megadni (0,1,2...stb)
    matrix.append(sor)  # mátrix egy sora megvan

print('Csúcsmátrix:')
for elem in matrix:
    print(elem)

# Élmátrix generálása (súlyokkal)
élmátrix = []  # ebben lesz a „végeredmény
sor = []  # feldolgozáshoz szükséges segédadat
csúcs = set()  # halmaz, mert megoldja az ismétlődő elemek problémáját
for i in range(len(graph)):
    csúcs.add(i)  # i csúcs elhelyezése a halmazba
    for elemek in graph[i]:
        sor.append(i)  # i index és egyben a gráf csúcspontja
        # sor első eleme a kiinduló csúcs
        if elemek[0] not in csúcs:  # még fel nem dolgozott csúcs
            sor.append(elemek[0])  # sor 2. eleme a végpont
            sor.append(elemek[1])  # sor 3. harmadik eleme a súly
            élmátrix.append(sor)

        sor = []


# élmátrix rendezése súly szerint, csak a balhé kedvéért J
def harmadikszerint(elem):
    return elem[2]


print('Élmátrix:')
élmátrix = sorted(élmátrix, key=harmadikszerint)
print(élmátrix)