• 图论题笔记(二):城市地图


    求从1到5的最短路径,当前用深度搜索解(强化练习深度搜索练习),效率并不高,因为需要遍历所有情况

    备注:

    1,稀疏图并不适合用邻接表,更适合用链表,此处数据较小可以练习邻接表

    import copy
    data='''4 x
    0 1 2
    0 4 10
    1 2 3
    1 4 7
    2 0 4
    2 3 4
    3 4 5
    4 2 3'''
    
    graph_init_row=data.split("
    ")
    end=int(graph_init_row[0].split(" ")[0])
    
    #初始化邻接表
    adj_list=[[0]*5 for i in range(5)]
    for row in graph_init_row[1:]:
        row_init=list(map(int,row.split(" ")))
        adj_list[row_init[0]][row_init[1]]=row_init[2]
    
    
    def dfs(cX,adj,path,value,end,minx):
    
        #优化
        if sum(value)>minx:
            return
    
        if cX==end:
            global paths,values
            paths.append(copy.copy(path))
            values.append(copy.copy(value))
    
            thev=sum(value)
            print("p:",path,"v:",thev)
            
            if thev<minx:
                minx=thev
    
            return
        
        
        for x,v in enumerate(adj[cX]):
            if v!= 0 and x not in path:
                path.append(x)
                value.append(v)
                dfs(x,adj,path,value,end,minx)
                path.pop()
                value.pop()
        
    paths=[]
    values=[]
    
    p=[0]
    v=[0]
    dfs(0,adj_list,p,v,end,float("inf"))
    
    vs=list(map(sum,values))
    print("最短路径为",paths[vs.index(min(vs))],"最小权重为",min(vs))
    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    dockerfile 详解
    kubectl简介
    关于高级事件的使用
    关于拖拽延伸出来的一些效果
    照片墙的制作过程及其出现的问题
    关于360度全景照片的问题总结
    实战演练-记账本App (五)
    人月神话阅读笔记02
    实战演练-记账本App(四)
    实战演练-记账本App(三)
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12402418.html
Copyright © 2020-2023  润新知