程序员必须掌握的十种算法---Dijkstra算法
来源:互联网 发布:便笺元数据损坏的原因 编辑:程序博客网 时间:2024/06/05 07:10
由荷兰计算机科学家艾兹赫尔·戴克斯特拉提出的使用了广度优先搜索解决非负权有向图的单源最短路径问题。
#include<stdio.h>int main(){ /* *e存储图的矩阵表示 *dis存储1号顶点到其余各个顶点的距离 *book表示各个顶点是否已经找到最小距离 */ int e[10][10],dis[10],book[10],i,j,n,m,t1,t2,t3,u,v,min; int inf=99999999;//用inf(infinity)存储一个我们认为的正无穷的值 //读入n,m,n表示顶点个数,m表示边的条数 scanf("%d %d",&n,&m); //初始化 for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i==j) e[i][j]=0; else e[i][j]=inf; } } //读入边 for(i=1;i<=n;i++) { scanf("%d %d %d",&t1,&t2,&t3); e[t1][t2]=t3; } //初始化dis数组,这里是1号顶点到其余各个顶点的初始化路程 for(i=1;i<=n;i++) dis[i]=e[1][i]; //book数组初始化 for(i=1;i<=n;i++) book[i]=0; book[1]=1; //Dijkstra算法的核心语句 for(i=1;i<=n-1;i++) { //找到离1号顶点最近的顶点 min=inf; for(j=1;j<=n;j++) { if(book[j]==0&&dis[j]<min) { min=dis[j];//min存储这个最小的距离 u=j;//u表示最近的顶点是哪个顶点 } } book[u]=1; for(v=1;v<=n;v++) { //查看顶点u到顶点v是否连通 if(e[u][v]<inf) { if(dis[v]>dis[u]+e[u][v]) dis[v]=dis[u]+e[u][v]; } } } //输出最终结果 for(i=1;i<=n;i++) { printf("%d ",dis[i]); } getchar(); return 0;}
0 0
- 程序员必须掌握的十种算法---Dijkstra算法
- 程序员必须掌握的十种算法---快速排序算法
- 程序员必须掌握的十种算法---堆排序算法
- 程序员必须掌握的十种算法---二分查找算法
- 程序员必须掌握的算法?
- 程序员必须掌握的六种基本排序算法
- 程序员必须掌握的七种排序算法
- 程序员必须掌握哪些算法?
- 程序员必须掌握哪些算法?
- 程序员必须知道的十大算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- Java程序员必须掌握的8大排序算法
- javascript入门笔记(4)——对象
- thinkphp:模板中使用的系统变量和常量
- Reverse Number
- Codeforces Round #286 (Div. 1) B. Mr. Kitayuta's Technology (强连通分量)
- SQLite 数据类型
- 程序员必须掌握的十种算法---Dijkstra算法
- android绘制带圆角的editText
- PowerPC PPC460-S MMU(三 Access Control)
- Android 混淆代码总结
- 数据库查询优化(使用union 和 union all 的区别)
- canny算子及滑动条的使用
- 如何用1块钱赚到1000块?斯坦福大学教你如何跳出定势思维!
- hdu 2082 多重背包简化版
- NYOJ 37 回文序列