zoukankan      html  css  js  c++  java
  • 图论题笔记(二):城市地图

    求从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))
    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    html基础进阶笔记
    程序员的自我提升
    过滤思路
    for循环
    jeesite在生成主子表代码的时候在eclipse里面没有子表代码
    java学习笔记2
    人性的弱点
    java学习笔记
    Percona Toolkit 安装使用
    mysql 中查询当天、本周,本月,上一个月的数据
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12402418.html
Copyright © 2011-2022 走看看