用python语言实现的最短路spfa算法
最近在学习python,对于一个c系列语言深度中毒的人来说很多问题需要抛弃旧的认识并重新理解
#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])
说一说遇到的问题吧
1python列表的长度不固定,当需要读取固定位置的元素时要确定那个位置非空
2python不支持“++”,c++中“num[index++]”这种写法在这里行不通
3输入int类型的值应该先input再用int()强制转换
4全局变量要用global申明,并在函数中也要用global申明
5说一个很邪门的事情
''' 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)
这是一个简单的向list中插入学生信息的程序。但是运行时候会发现,最后插入的值会覆盖前面的学生信息值
打印结果如下
请输入学生人数3 zys 20 xcy 19 ghz 20 输出结果 ghz 20 ghz 20 ghz 20
把addstudent改为
Python代码
def addStudent(nm ,ag): global stu,k s = student() s.name = nm s.age = ag stu.append(s) k+=1 pass
后问题解除

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

PHP主要是过程式编程,但也支持面向对象编程(OOP);Python支持多种范式,包括OOP、函数式和过程式编程。PHP适合web开发,Python适用于多种应用,如数据分析和机器学习。

PHP适合网页开发和快速原型开发,Python适用于数据科学和机器学习。1.PHP用于动态网页开发,语法简单,适合快速开发。2.Python语法简洁,适用于多领域,库生态系统强大。

PHP起源于1994年,由RasmusLerdorf开发,最初用于跟踪网站访问者,逐渐演变为服务器端脚本语言,广泛应用于网页开发。Python由GuidovanRossum于1980年代末开发,1991年首次发布,强调代码可读性和简洁性,适用于科学计算、数据分析等领域。

Python更适合初学者,学习曲线平缓,语法简洁;JavaScript适合前端开发,学习曲线较陡,语法灵活。1.Python语法直观,适用于数据科学和后端开发。2.JavaScript灵活,广泛用于前端和服务器端编程。

在 Sublime Text 中运行 Python 代码,需先安装 Python 插件,再创建 .py 文件并编写代码,最后按 Ctrl B 运行代码,输出会在控制台中显示。

VS Code可以在Windows 8上运行,但体验可能不佳。首先确保系统已更新到最新补丁,然后下载与系统架构匹配的VS Code安装包,按照提示安装。安装后,注意某些扩展程序可能与Windows 8不兼容,需要寻找替代扩展或在虚拟机中使用更新的Windows系统。安装必要的扩展,检查是否正常工作。尽管VS Code在Windows 8上可行,但建议升级到更新的Windows系统以获得更好的开发体验和安全保障。

在 Visual Studio Code(VSCode)中编写代码简单易行,只需安装 VSCode、创建项目、选择语言、创建文件、编写代码、保存并运行即可。VSCode 的优点包括跨平台、免费开源、强大功能、扩展丰富,以及轻量快速。

VS Code 可用于编写 Python,并提供许多功能,使其成为开发 Python 应用程序的理想工具。它允许用户:安装 Python 扩展,以获得代码补全、语法高亮和调试等功能。使用调试器逐步跟踪代码,查找和修复错误。集成 Git,进行版本控制。使用代码格式化工具,保持代码一致性。使用 Linting 工具,提前发现潜在问题。
