图论相关知识

图论

DFS 算法

BFS 算法

Dijkstra 算法

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
利用后推可以推出最短路径

INF=99999999#无穷
def Dispath(dist,path,s,v):
    #打印从v出发的所有顶点的最短路径,
    result=[]
    for i in range(len(dist)):
        print("{}->{}".format(v,i),end=' ')
        print("最短路径为:",end=' ')
        print(dist[i],end=' ')
        j=i
        while(j!=v):
            result.append(j)
            j=path[j]
        result=result[::-1]
        print([0]+result)
        result=[]

def Dijkstra(graph,v):
    dist=[INF]*len(graph)#距离数组
    path=[0]*len(graph)#路径数组
    s=[0]*len(graph)#s[i]=1代表顶点i在s中,s[i]=0表示顶点在u中
    
    for i in range(len(graph)):
        dist[i]=graph[v][i]#距离初始化
        s[i]=0 #s[]置空
        if(graph[v][i]<INF):
            path[i]=v#顶点v到i有边时
        else:
            path[i]=-1#顶点v到i没边时

    s[v]=1#第一个顶点
    for i in range(len(graph)):
        MINdis=INF
        for j in range(len(graph)):#找到长度最小的点u
            if(s[j]==0 and dist[j]<MINdis):
                u=j
                MINdis=dist[j]
        s[u]=1#u加入到s中
        for j in range(len(graph)):#调整,修改不在s中的顶点的距离
            if(s[j]==0):
                if(graph[u][j]<INF and dist[u]+graph[u][j]<dist[j]):
                    dist[j]=dist[u]+graph[u][j]
                    path[j]=u
    
    print(dist)
    print(path)
    Dispath(dist,path,s,v)







graph = [[0, 1, 12, INF, INF, INF], 
            [INF, 0, 9, 3, INF, INF], 
            [INF, INF, 0, INF, 5, INF], 
            [INF, INF, 4, 0, 13, 15], 
            [INF, INF, INF, INF, 0, 4], 
            [INF, INF, INF, INF, INF, 0]]
Dijkstra(graph,0)


 

结果:
在这里插入图片描述

Floyd 算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

lonota_zyx

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

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

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

打赏作者

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

抵扣说明:

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

余额充值