Heim > Artikel > Backend-Entwicklung > Der in der Python-Sprache implementierte SPFA-Algorithmus für den kürzesten Weg
Ich lerne kürzlich Python. Für jemanden, der stark von der Sprache der C-Serie abhängig ist, gibt es viele Probleme, die aufgegeben und neu verstanden werden müssen
#coding=utf-8 global n, m, k, edge, head, dis, stack, vis, nMax, mMax, inf nMax = 100 mMax = 10000 inf = 1e+10 class e(object): pass n = 0 k = 0 m = 0 eg = e() edge = [] head = [0] dis = [0] stack = [0] vis = [0] def addedge(a, b, c): global k, edge, head ed = e() ed.u = a #you can delect it ed.v = b ed.w = c ed.next = head[a] edge.append(ed) head[a]=k k+=1 pass def spfa(): global n, m, k, edge, head, dis, stack, vis,inf i = top = 0 for i in range(0 , n): dis[i] = inf vis[i] = 0 dis[0] = 0 vis[0] = 1 top+=1 stack[top] = 0 while(top!=0): u = stack[top] top-=1 i = head[u] while(i!=0): v = edge[i].v if dis[v] > dis[u]+edge[i].w: dis[v] = dis[u]+edge[i].w if(vis[v]==0): vis[v] = 1 top+=1 stack[top] = v i = edge[i].next vis[u] = 0 pass if __name__ == '__main__': u = v = l = i = 0 for i in range(0,nMax): head.append(0); dis.append(0) vis.append(0) stack.append(0) while(1): na = input() n = int(na) ma = input() m = int(ma) edge=[0] k = 1 for i in range(0,n): head[i] = 0 for i in range(0,m): ua = input() va = input() la = input() u = int(ua) v = int(va) l = int(la) addedge(u,v,l) spfa() for i in range(1,n): print(dis[i])
Lassen Sie uns über die aufgetretenen Probleme sprechen
1 Die Länge der Python-Liste ist nicht festgelegt. Wenn Sie ein Element an einer festen Position lesen müssen, müssen Sie sicherstellen, dass die Position nicht leer ist
2 Python unterstützt nicht „++“ und „num[index++“ in c++ ]“ Diese Schreibweise funktioniert hier nicht
3 Der Eingabetyp int value sollte zuerst eingegeben und dann die Konvertierung mit int erzwungen werden ()
4 Globale Variablen sollten mit global deklariert werden und auch in der Funktion „Use global“-Anweisung
5 Lassen Sie uns über eine sehr seltsame Sache sprechen
''' Created on 2014年7月5日 @author: bbezxcy ''' global stu,k class student: pass stu = [] def addStudent1(nm ,ag): global stu,k stu[k].name = nm stu[k].age = ag k+=1 pass def addStudent(nm ,ag): global stu,k stu[k].name = nm stu[k].age = ag k+=1 pass if __name__ == '__main__': num = 0 k = 0 strn = input("请输入学生人数") num = int(strn) ss = student() for i in range(0 ,num): stu.append(ss) for i in range(0 ,num): nm = input() ag = input() addStudent(nm ,ag) for i in range(0,num): print(stu[i].name) print(stu[i].age)
Das ist eine einfaches Programm zum Einfügen von Schülerinformationen in die Liste. Beim Ausführen werden Sie jedoch feststellen, dass der zuletzt eingefügte Wert den vorherigen Schülerinformationswert überschreibt
Das Druckergebnis ist wie folgt
请输入学生人数3 zys 20 xcy 19 ghz 20 输出结果 ghz 20 ghz 20 ghz 20
Ändern Sie addstudent in
Python Code
def addStudent(nm ,ag): global stu,k s = student() s.name = nm s.age = ag stu.append(s) k+=1 pass
Nachdem das Problem gelöst ist