Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import networkx as nx
- import matplotlib.pyplot as plt
- class Wezel:
- IDEN = 1
- x = 1
- y = 1
- klienci = 1
- def __init__(self, IDEN, x, y, klienci):
- self.IDEN = IDEN
- self.x = x
- self.y = y
- self.klienci = klienci
- def wypisz(self):
- print(self.IDEN, self.x, self.y, self.klienci)
- def IDEN_(self):
- return self.IDEN
- class Krawedz:
- IDEN = 1
- poczatek = 1
- koniec = 1
- koszt = 1
- def __init__(self, IDEN, poczatek, koniec, koszt):
- self.IDEN = IDEN
- self.poczatek = poczatek
- self.koniec = koniec
- self.koszt = koszt
- def wypisz(self):
- print(self.IDEN, self.poczatek, self.koniec, self.koszt)
- class Kabel:
- IDEN = 1
- pojemnosc = 1
- koszt = 1
- p_do_k = 1
- def __init__(self, IDEN, pojemnosc, koszt):
- self.IDEN = IDEN
- self.pojemnosc = pojemnosc
- self.koszt = koszt
- self.p_do_k = pojemnosc/koszt
- def wypisz(self):
- print(self.IDEN, self.pojemnosc, self.koszt, self.p_do_k)
- class Graf:
- Wezly = []
- Krawedzie = []
- Kable = []
- def __init__(self, Wezly, Krawedzie, Kable):
- self.Wezly = Wezly
- self.Krawedzie = Krawedzie
- self.Kable = Kable
- def wypisz(self):
- print(len(self.Wezly), "wezły")
- for x in self.Wezly:
- x.wypisz()
- print(len(self.Krawedzie), "krawedzie")
- for x in self.Krawedzie:
- x.wypisz()
- print(len(self.Kable), "kable")
- for x in self.Kable:
- x.wypisz()
- def Dijkstra(Gr, Graf, start, end, weight):
- path_n = nx.dijkstra_path(Gr, start, end, weight)
- G = nx.Graph()
- s_krawedzie = {}
- pozycje = {}
- etykiety = {}
- for x in Graf.Wezly:
- if x.IDEN in path_n:
- G.add_node(x.IDEN)
- s_krawedzie.update({x.IDEN: x.IDEN})
- pozycje.update({x.IDEN: [x.x, x.y]})
- if x.klienci == -1:
- centrala.update({x.IDEN: str(x.IDEN) + "\n Centrala"})
- else:
- centrala.update({x.IDEN: x.IDEN})
- else:
- pozycje.update({x.IDEN: [0, 0]})
- for x in Graf.Krawedzie:
- if x.poczatek in path_n and x.koniec in path_n:
- G.add_edge(x.poczatek, x.koniec, label=x.koszt)
- etykiety = nx.get_edge_attributes(G, 'label')
- plt.figure(2)
- nx.draw_networkx_labels(G, labels=centrala, pos=pozycje, font_size=12)
- nx.draw_networkx_edge_labels(G, label_pos=0.5, font_color="b", edge_labels=etykiety, pos=pozycje)
- nx.draw(G, pos=pozycje)
- plt.title("Najkrótsza ścieżka według algorytmu Dijkstry")
- plt.show()
- wezly = []
- krawedzie = []
- kable = []
- numer_linijki = 0
- G = nx.Graph()
- with open("rzeczy.txt", "r") as f:
- data = f.readlines()
- f.close()
- data1 = []
- for line in data:
- words = line.split()
- if words[0] == "#":
- continue
- data1.append(line)
- for line in data1:
- numer_linijki = numer_linijki + 1
- words = line.split()
- if words[0] == "WEZLY":
- temp = data1[numer_linijki]
- for x in range(1, int(words[2])+1):
- tempw = data1[numer_linijki+x-1].split()
- wezly.append(Wezel(int(tempw[0]), int(tempw[1]), int(tempw[2]), int(tempw[3])))
- if words[0] == "KRAWEDZIE":
- temp = data1[numer_linijki]
- for x in range(1, int(words[2])+1):
- tempw = data1[numer_linijki+x-1].split()
- krawedzie.append(Krawedz(int(tempw[0]), int(tempw[1]), int(tempw[2]), int(tempw[3])))
- if words[0] == "KABLE":
- temp = data1[numer_linijki]
- for x in range(1, int(words[2])+1):
- tempw = data1[numer_linijki+x-1].split()
- kable.append(Kabel(int(tempw[0]), int(tempw[1]), int(tempw[2])))
- Graf = Graf(wezly, krawedzie, kable)
- Graf.wypisz()
- s_krawedzie = {}
- pozycje = {}
- centrala = {}
- etykiety = {}
- for x in Graf.Wezly:
- G.add_node(x.IDEN)
- s_krawedzie.update({x.IDEN: x.IDEN})
- pozycje.update({x.IDEN: [x.x, x.y]})
- if x.klienci == -1:
- centrala.update({x.IDEN: str(x.IDEN)+"\n Centrala"})
- else:
- centrala.update({x.IDEN: x.IDEN})
- print(G.nodes())
- path_e = []
- sciezka = {}
- for x in Graf.Krawedzie:
- G.add_edge(x.poczatek, x.koniec, label=x.koszt)
- print(G.edges())
- f1 = plt.figure(1)
- etykiety = nx.get_edge_attributes(G, 'label')
- nx.relabel_nodes(G, s_krawedzie, copy=False)
- nx.draw_networkx_labels(G, labels=centrala, pos=pozycje, font_size=12)
- nx.draw_networkx_edge_labels(G, label_pos=0.5, font_color="b", edge_labels=etykiety, pos=pozycje)
- nx.draw(G, pos=pozycje)
- plt.savefig("simple_path.png") # save as png
- # display
- Dijkstra(G, Graf, 3, 5, 'label')
Advertisement
Add Comment
Please, Sign In to add comment