dijkstra的多解的情况
来源:互联网 发布:java面向过程实现加法 编辑:程序博客网 时间:2024/06/05 05:14
1.最短路多解的时候,求节点数最少的
for(int j=0; j<n; j++) { if(!vis[j] && dl[j]>dl[p]+Gl[p][j]) { dl[j]=dl[p]+Gl[p][j]; pathl[j]=p; pathc[j]=pathc[p]+1;//开一个数组记录节点数 } else if(!vis[j] && dl[j]==dl[p]+Gl[p][j]) { if(pathc[j]>pathc[p]+1) { pathc[j]=pathc[p]+1;//多解时选择节点数少的那条 pathl[j]=p; } } }
2.最短路每个边两个权值时,以其中一个跑最短路,当多解时以另一个最短为准
for(int j=0; j<n; j++) { if(!vis[j] && dt[j]>dt[p]+Gt[p][j]) { dt[j]=dt[p]+Gt[p][j]; patht[j]=p; pathd[j]=pathd[p]+Gl[p][j];//开一个数组记录另一个权值为标准的最短,相当于同时跑两个标准的最短路 } else if(!vis[j] && dt[j]==dt[p]+Gt[p][j]) { if(pathd[j]>=pathd[p]+Gl[p][j]) { pathd[j]=pathd[p]+Gl[p][j]; patht[j]=p; } } }//要注意的是,不能直接把第一个标准的最短路结果拿来用。即,这样是不对的:
for(int j=0; j<n; j++) { if(!vis[j] && dt[j]>dt[p]+Gt[p][j]) { dt[j]=dt[p]+Gt[p][j]; patht[j]=p; } else if(!vis[j] && dt[j]==dt[p]+Gt[p][j]) if(!vis[j] && dl[j]>=dl[p]+Gl[p][j]) patht[j]=p; }
阅读全文
0 0
- dijkstra的多解的情况
- 为什么Dijkstra算法不适用边长为负数的情况
- Dijkstra最短路径求解(不考虑权值为负的情况)
- 改变距离定义情况下Dijkstra算法正确性成立的一个充分条件
- 多消费者的情况
- WA 了的uva 10806 - Dijkstra, Dijkstra.
- Heap+Dijkstra堆优化的Dijkstra
- PriorityQueue+Dijkstra优先队列优化的Dijkstra
- 小白+dijkstra写的多简洁
- Dijkstra算法的实现
- 堆优化的Dijkstra
- 朴素的dijkstra模板
- POJ3268基本的Dijkstra
- 图的Dijkstra算法
- 原生的Dijkstra
- Dijkstra算法的实现
- Dijkstra算法的认识
- dijkstra算法的实现。
- HTTP协议:概括性知识
- 一个Activity分别加载多个layout布局文件
- 秒懂Vuejs、Angular、React原理和前端发展历史
- 人是一种复杂的动物
- java 循环中String与StringBuilder效率探究
- dijkstra的多解的情况
- Nexus私服使Maven更加强大
- keystore和重签名
- [知了堂学习笔记]_JavaScript之数据类型
- python--读取文件夹名称 import os
- 使用Mybatis-Generator自动生成Dao、Model、Mapping相关文件
- linux 定时备份数据库并保留七天备份
- 设计模式-简单工厂模式
- 学习java的方法