dijkstra算法
来源:互联网 发布:好的枕头 知乎 编辑:程序博客网 时间:2024/05/17 19:21
1.dijksta算法是贪婪算法的一个例子,贪婪算法分阶段地求解一个问题,每个阶段把当前的解作为最优解。dijkstra的算法思想与广度优先搜索类似,dijkstra算法可以解决非负权值有向图的单源最短路径问题,算法的结果是得到一颗最短路径树。
2.dijkstra算法的基本思想是:(1)初始时,集合S仅仅包含源点s,d[s]=0,如果其它顶点w和s邻接,d[w]的值为权值,其它顶点若不和s邻接,则距离设置为无穷大(2)从邻接顶点选取与s最近的顶点w,w加入集合S(3)以w为中心,更新源点v到各节点的距离,即如果d[w]+d[w,v]<d[v],则用d[w]+d[w,v]更新s到v的距离。(4)重复(2)(3),直到集合S中包含所有的顶点
3.dijkstra算法复杂度
使用邻接矩阵或者邻接表表示的图,dijkstra算法的复杂度为O(n^2)
4.dijkstra算法的程序为
# include <iostream>using namespace std;# include <stdlib.h># define NUM 10# define ARG 10# define INF 10000int visited[NUM];int dist[NUM];int path[NUM];struct graph{int num;int arc;int a[NUM][NUM];char name[NUM];};int main(){ int i;void create(graph &g);void print(graph &g);void dijkstra(graph &g,int i);graph g;create(g);dijkstra(g,0);for(i=0;i<g.num;i++){cout<<dist[i]<<endl;}system("pause");return 0;}int locate(graph &g,char a){int i=0;for(i=0;i<g.num;i++)if (g.name[i]==a)return i;return -1;}void create(graph &g) //用邻接矩阵创建图{int i,j;cout<<"input num of nodes and num of edges"<<endl;cin>>g.num>>g.arc;for(i=0;i<g.num;i++)cin>>g.name[i];for(i=0;i<NUM;i++)for(j=0;j<NUM;j++)g.a[i][j]=-1;for(i=0;i<g.arc;i++){char a,b;int i,j,w;cout<<"input name of nodes"<<endl;cin>>a>>b>>w;i=locate(g,a);j=locate(g,b);g.a[i][j]=w;g.a[j][i]=w;}}void dijkstra(graph &g,int i) //dijkstra算法的程序 {int j;int min;int t;for(j=0;j<g.num;j++) //距离、前驱初始化{visited[j]=0;if(g.a[i][j]>0){dist[j]=g.a[i][j];path[j]=i;}else{dist[j]=INF;path[j]=-1;}}path[i]=i;dist[i]=i;for(i=1;i<g.num;i++){ min=INF;for(j=0;j<g.num;j++) //每次选取距离最小的结点if(!visited[j]&&dist[j]<min){min=dist[j];t=j;}visited[t]=1; //距离最小的点标记为已访问for(i=0;i<g.num;i++)if(!visited[i]&&min+g.a[t][i]<dist[i]){dist[i]=min+g.a[t][i]; //更新距离和前驱path[i]=t;}}}1 0
- Dijkstra算法
- dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra 算法
- Dijkstra 算法
- dijkstra算法
- Dijkstra 算法
- Dijkstra算法
- Dijkstra算法
- Dijkstra算法
- dijkstra算法
- JAVA--排序
- 有钱就是不一样
- strits2 csrf portect
- java实现二叉树的添加和中序,前序排列;求二叉树的高度
- ActionBar中的下拉菜单操作
- dijkstra算法
- eclipse取回被覆盖的代码
- 运营初期应该选用什么样的机器人
- 免费接口API
- 模板——大数相乘
- 软件设计漫谈之二:设计模式只是一把锤子!
- SVN源码服务器搭建-详细教程
- [Leetcode]Rotate Image
- QString和CString 相互转换