Здравствуйте!
Было задание для графа записанного в текстовый файл в форме:
Первая строка: число вершин, пробел, число ребер
Остальные строки: номер одной вершины (номера начинаются с 1), пробел, номер второй вершины, пробел, вес ребра соединяющего эти вершины.
Потом после запуска программы вводятся номера начальной и конечной вершин, и программа с помощью алгоритма Дейкстры должна найти кратчайший путь между этими вершинами. Сделал программу:
import networkx as nx
G=nx.Graph()
abc=open("d2103.eliminated.wel")
w=abc.readline()
o=w.split()
m=int(o[0])
n=int(o[1])
for i in range(n):
t=abc.readline()
r=t.split()
x=int(r[0])
y=int(r[1])
z=int(r[2])
G.add_edge(x, y, weight=z)
abc.close()
n=int(input())
k=int(input())
a=[[float('inf'), i+1] for i in range(m)]
a[n-1][0]=0
b=[]
for i in range(m):
b.append([])
b[n-1]=[n]
c=[]
e=[i for i in range(1, m+1)]
while True:
for i in range(len(e)):
found = False
if e[i] not in c:
found=True
break
if not found:
break
f=[]
for i in a:
if i[1] not in c:
f.append(i)
g=[]
for i in range(len(f)):
g.append(f[i][0])
v1=min(g)
for i in f:
if i[0]==v1:
v=i[1]
break
c.append(v)
for u in G[v]:
if u not in c:
if a[u-1][0]>a[v-1][0]+G[v][u]['weight']:
a[u-1][0]=a[v-1][0]+G[v][u]['weight']
b[u-1]=[]
for i in range(len(b[v-1])):
b[u-1].append(b[v-1][i])
b[u-1].append(u)
print(b[k-1])
Но эта программа работает намного медленее чем встроенный алгоритм Дейкстры (
import networkx as nx
G=nx.Graph()
abc=open("d2103.eliminated.wel")
w=abc.readline()
o=w.split()
m=int(o[0])
n=int(o[1])
for i in range(n):
t=abc.readline()
r=t.split()
x=int(r[0])
y=int(r[1])
z=int(r[2])
G.add_edge(x, y, weight=z)
abc.close()
n=int(input())
k=int(input())
print(nx.dijkstra_path(G, n, k))
), три минуты против двух секунд. Почему у меня так медленно и как это исправить?