dijkstra算法
来源:互联网 发布:网络常用协议的端口号 编辑:程序博客网 时间:2024/06/05 18:51
算法步骤:
(1)初始化:将源点S到图中各点的直接距离最为初始值记录S到各点的最短距离,不能直接到达记作INF,S到本身的距离为0。
(2)把所有其他除S的点放到集合B中,在所有集合B中遍历一个到S的最短路径距离的点u,并将其在集合B中取出。
(3)由新确定的u点更新S到集合B中一点v的距离为最短。
(4)重复以上2、3两个步骤。
基本思想:设置顶点集合S并不断地作贪心选择来扩充这个集合。一个顶点属于集合S当且仅当从源到该顶点的最短路径长度已知。初始时,S中仅含有源。设u是G的某一个顶点,把从源到u且中间只经过S中顶点的路称为从源到u的特殊路径,并用数组dist记录当前每个顶点所对应的最短特殊路径长度。Dijkstra算法每次从V-S中取出具有最短特殊路长度的顶点u,将u添加到S中,同时对数组dist作必要的修改。一旦S包含了所有V中顶点,dist就记录了从源到所有其它顶点之间的最短路径长度。
时间复杂度:O(n*n)
空间复杂度(使用邻接矩阵存储时):O(n*n)
void dijkistra(int x){ int i,j,k,Min; fill(used,used+n+1,false); for(i = 1;i <= n; i++) d[i] = map[x][i]; d[x]=0; while(true) { int v=-1; for(int u=0;u<n;u++) if(!used[u]&&(v==-1||d[u]<d[v])) v=u; if(v==-1) break; used[v]=1; for(int u=0;u<n;u++) d[u]=min(d[u],d[v]+map[v][u]); }}
0 0
- Dijkstra算法
- dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra 算法
- dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- dijkstra算法
- Mac——snip滚动截图
- c++中的static关键字
- cf 671D Roads in Yusland
- MacOSX上的NFS文件共享
- 第二天、在linux设置Mysql允许用户远程登录
- dijkstra算法
- 嵌入式C++开发详解(五)
- [BZOJ4552][Tjoi2016&Heoi2016][线段树][二分]排序
- BZOJ2073: [POI2004]PRZ
- 利用反射调用私有方法
- Android的一些trick
- (队列思想+快排函数)—keke祝你元宵节快乐!
- 微积分
- IOS开发之OC篇(5)—— NSNumber、NSValue