graf.py
1    # Dictionary vagy magyarul szótár formában tárolt gráf!
2    # A szótár struktúra lényege, hogy egy azonosító ("szó") és annak jelentése adott.
3    # Pl. az alábbiban:  graph[0] azonos a [(1,7), (3, 5)] listával
4    # Gyakorlatilag a "szó" (pl. 0) indexeli a graph szótárt
5    graph = {0: [(1, 7), (3, 5)],
6             1: [(0, 7), (2, 8), (3, 9), (4, 7)],
7             2: [(1, 8), (4, 5)],
8             3: [(0, 5), (1, 9), (4, 15), (5, 6)],
9             4: [(1, 7), (2, 5), (3, 15), (5, 8), (6, 9)],
10            5: [(3, 6), (4, 8), (6, 11)],
11            6: [(4, 9), (5, 11)]}
12   
13   # Csúcsmátrix formába írjuk át a szótárt
14   # Célszerű a csúcsokat 0-tól kezdődően megnevezni, a Python  indexelése miatt
15   # (Tudjuk, ugye, hogy mindig nullától indulnak az indexek!)
16   # A mátrix most 7x7-es lesz!
17   matrix = []
18   
19   for i in range(len(graph)):
20       # len(graph) most 7, mivel 7 bejegyzés van a szótárban
21       sor = [0] * len(graph)  # sor feltöltése 7 nullával  
22       for j in range(len(graph[i])):
23           # A szótár aktuális bejegyzésének feldolgozása
24           (p, e) = graph[i][j]
25           # A szótár i. bejegyzésének j. eleme egy számpár
26           sor[p] = e
27           # p a gráf egy pontja, e az él "súlya" - ezért célszerű
28           # a pontokat indexesen megadni (0,1,2...stb)
29       matrix.append(sor)  # mátrix egy sora megvan
30   
31   print('Csúcsmátrix:')
32   for elem in matrix:
33       print(elem)
34   
35   # Élmátrix generálása (súlyokkal)
36   élmátrix = []  # ebben lesz a „végeredmény
37   sor = []  # feldolgozáshoz szükséges segédadat
38   csúcs = set()  # halmaz, mert megoldja az ismétlődő elemek problémáját
39   for i in range(len(graph)):
40       csúcs.add(i)  # i csúcs elhelyezése a halmazba
41       for elemek in graph[i]:
42           sor.append(i)  # i index és egyben a gráf csúcspontja
43           # sor első eleme a kiinduló csúcs
44           if elemek[0] not in csúcs:  # még fel nem dolgozott csúcs
45               sor.append(elemek[0])  # sor 2. eleme a végpont
46               sor.append(elemek[1])  # sor 3. harmadik eleme a súly
47               élmátrix.append(sor)
48   
49           sor = []
50   
51   
52   # élmátrix rendezése súly szerint, csak a balhé kedvéért J
53   def harmadikszerint(elem):
54       return elem[2]
55   
56   
57   print('Élmátrix:')
58   élmátrix = sorted(élmátrix, key=harmadikszerint)
59   print(élmátrix)