2194出差-节点开销Bellman-ford/图论

打印 上一主题 下一主题

主题 1611|帖子 1611|积分 4833

题目网址: 蓝桥账户中央
  

   我先用Floyd跑了一遍,不出所料TLE了
  1. n,m=map(int,input().split())
  2. c=list(map(int,input().split()))
  3. INF=float('inf')
  4. ma=[[INF]*n for i in range(n)]
  5. for i in range(m):
  6.     u,v,w=map(int,input().split())
  7.     ma[u-1][v-1]=w
  8.     ma[v-1][u-1]=w#“道路”:双向
  9. for k in range(n):
  10.     for i in range(n):
  11.         for j in range(n):
  12.             ma[i][j]=min(ma[i][j],ma[i][k]+ma[k][j]+c[k])
  13. print(ma[0][n-1])
复制代码
边集数组 

  1. n,m=map(int,input().split())
  2. #节点cost,注意:起点和终点得设为0. ------------
  3. c=list(map(int,input().split()))
  4. c[0]=0
  5. c[n-1]=0
  6. #------------------------------------------
  7. edges=[]
  8. for i in range(m):
  9.     u,v,w=map(int,input().split())
  10.     edges.append((u,v,w))
  11.     #别忘记双向边
  12.     edges.append((v,u,w))
复制代码
留意:起点和终点的cost得洗濯为0(后面会具体解释)
  而且本题是双向边,得两次edges.append( )
  

  Bellman-ford算法

  从起点向外通报最短路信息,得颠末n-1次松弛才能到达终点
  前(n-1)轮检视所有的边(u,v,c),进行松弛操作(判定所有边能否使新路径更小):
  (假如第n轮还有更小的那就是存在负环了)
  sta去v的新路径:从sta先去u城,加上从u城到v的代价c ,还得加上城市点的cost
  但是是u城的cost照旧v城的cost?
  d[ k ]代表从sta到k点的最小耗费,为了方便统计我们得讲所有在路径上的点的话费都算在里面,这也就是为什么前面需要洗濯起点和终点的cost为0
  那么新路径应该加上的不是中介点u的cost,而是新的v的,这点和floyd的点耗费处理差异
  (floyd是多源最短路,而bellman是单源最短路)
  

  1. def bellman(n,edges,sta,c):
  2.     INF=float('inf')
  3.     d=[INF]*(n+1)           #注意输入起始从1开始,所以得n+1 ,初始化无边
  4.     d[sta]=0                #d数组是从sta到各点的最短路径,自己到自己为0
  5.     #n-1轮松弛
  6.     for i in range(n-1):
  7.         for u,v,w in edges:
  8.             if d[u]!=INF:
  9.                 ncost=d[u]+w+c[v-1]#注意c的索引
  10.                 if ncost<d[v]:
  11.             #从sta有边到u ,而且新路径更短
  12.                     d[v]=ncost
  13.     #第n轮:检测负环
  14.     for u,v,w in edges:
  15.         if d[u]!=INF and d[u]+w+c[v-1]<d[v]:
  16.             return None
  17.     return d
  18. d=bellman(n,edges,1,c) #注意起始从1开始
  19. if d:
  20.     print(d[n]) #从点1到点n
  21. else:
  22.     print('有负环')
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! 更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

农妇山泉一亩田

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表