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))
    可以直接留言交流问题或想法,每天都会看
  • 相关阅读:
    mysql truncate
    蠕虫复制
    mysql 一对多,多对多
    php实现文件下载
    JetBrains PhpStorm 整个项目中查找一个词语
    vim
    程序员减少代码BUG的7种方法,拒绝编程5分钟,查代码2小时!
    创建你的第一个Composer/Packagist包
    Elasticsearch
    Laravel 实践之路: 数据库迁移与数据填充
  • 原文地址:https://www.cnblogs.com/shitianfang/p/12402418.html
Copyright © 2011-2022 走看看