贪心算法求最短路径,用Python实现

主要思想
首先找到离源点最近的点,然后以这个点为源点再进行迭代,重复以上步骤

#-*- coding: utf-8 -*-
if __name__ =="__main__":
    n=0
    print("请输入图中点的数量")
    n=input()
    juzhen=[[0 for i in range(n)] for m in range(n)]
    print("请依次输入矩阵")
    for i in range(n):
        for j in range(n):
            juzhen[i][j]=input()
    d=[0 for m in range(n)]#记录各个顶点到0的最短距离
    p= [0 for m in range(n)]#记录最短路径要经过的点
    use= [0 for m in range(n)]#记录是否已经求得最短路径
    for i in range(n):
        d[i]=0;
        use[i]=0
        p[i]=0
    use[0]=1
    for i in range(0,n):
        d[i]=juzhen[0][i]#初始化d[i]的值
    for i in range(1,n):
        k=1
        min=100000
        for j in range(0,n):#首先找到目前最近的点
            if (use[j]==0 and d[j]<min):
                min=d[j]
                k=j
        use[k]=1
        for w in range(0,n):#围绕这个点进行迭代
            if(use[w]==0 and min+juzhen[k][w]<d[w]):
                d[w]=min+juzhen[k][w]
                p[w]=k
    for i in range(0,n):
        print(d[i])
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春哥111

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值