예제 #1
0
파일: bfs.py 프로젝트: bunkov/informatics
		for neighbour in G[current]: # Для соседа этой вершины
			if neighbour not in fired: # Если он не пройден
				fired.append(neighbour)
				queue.append(neighbour)
				edge = (current, neighbour) # Ребро - кортеж вершины и ее соседа
				edge_list.append(edge)
	return edge_list, fired # Вернуть первый для дальнейшей отрисовки, второй для проверки связности

G = getter.get_graph()

edge_list, woken = bfs(G, 'Апельсиновый') # Ребра основного дерева и список пройденных вершин
n = 1 # Кол-во компонент связности
while len(woken) != len(G.nodes()): # Пока не все вершины пройдены
	for node in G.nodes():
		if node not in woken:
			edge_part, woken_part = bfs(G, node, [], []) # Часть ребер и вершин, которые не были пройдены ранее
			# По идее функция должна вызываться по умолчанию с пустыми массивами, но почему-то запоминает прежние значения
			edge_list += edge_part
			woken += woken_part
			n += 1

print('Кол-во компонент связности:', n)
if n == 1:
	print('Граф связный')
else:
	print('Граф несвязный')

nx.draw_networkx_edges(G, getter.rendering(G), edge_list, width=8, alpha=0.5, edge_color='g') # Отрисовываем основное дерево

plt.axis('off')
plt.show()
예제 #2
0
import matplotlib.pyplot as plt
import networkx as nx
import getter
import dijkstra as d

G = getter.get_graph()
short_paths_list = {}
for node in G.nodes():
	short_paths_list[node] = d.dijkstra(G,node)
town_1 = input('Ищем кратчайший путь от ')
town_2 = input('до ')
current = town_2
edge_list = [] # Массив ребер кратчайшего пути (для отрисовки этих ребер)
while current != town_1:
	for neighbour in G[current]:
		path_to_current = short_paths_list[town_1][current]
		path_to_neighbour = short_paths_list[town_1][neighbour]
		weight = int(G[current][neighbour]['weight'])
		if path_to_current - path_to_neighbour == weight:
			edge_list.append((current, neighbour))
			current = neighbour
			break
	if current == town_2:
		print('Пути не существует')
		break

nx.draw_networkx_edges(G, getter.rendering(G), edge_list, width=6, alpha=1, edge_color='r') # Отрисовываем кратчайший путь

plt.axis('off')
plt.show()