dijkstra算法

来源:互联网 发布:好的枕头 知乎 编辑:程序博客网 时间:2024/05/17 19:21

1.dijksta算法是贪婪算法的一个例子,贪婪算法分阶段地求解一个问题,每个阶段把当前的解作为最优解。dijkstra的算法思想与广度优先搜索类似,dijkstra算法可以解决非负权值有向图的单源最短路径问题,算法的结果是得到一颗最短路径树。

2.dijkstra算法的基本思想是:(1)初始时,集合S仅仅包含源点s,d[s]=0,如果其它顶点ws邻接,d[w]的值为权值,其它顶点若不和s邻接,则距离设置为无穷大(2)从邻接顶点选取与s最近的顶点ww加入集合S3)以w为中心,更新源点v到各节点的距离,即如果d[w]+d[w,v]<d[v],则用d[w]+d[w,v]更新sv的距离。(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
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在花场上班客人约我出去玩怎么办 小天才电话手表开不了机怎么办 黑色笔芯弄在白色衣服上怎么办 su文件打开是意外的格式怎么办 su卡的动一下就卡怎么办 犀牛vary渲染的太曝光了怎么办 脑子老是乱想幻想控制不住怎么办 猫抓了破了点皮怎么办 小孩子喜欢玩别人家的玩具怎么办 孩子把别人家的玩具玩坏了怎么办 小新和爸妈一起睡觉那他们怎么办 ps画纸画的时候一直在移动怎么办 宝宝磕碰到家具上鼻梁碰破该怎么办 月经推迟11天了怎么办孕测棒单杠 小孩子不小心把蜡笔吃一点怎么办 线切割切割的工件表面有条纹怎么办 苹果手机不能用流量更新吃鸡怎么办 吃鸡更新成雨林如果内存不够怎么办 绝地求生刺激战场背包满了怎么办 绝地求生刺激战场模拟器满了怎么办 绝地求生刺激战场电脑版满了怎么办 绝地求生手游模拟器注册上限怎么办 绝地求生电脑模拟器已达上限怎么办 三星s5锁屏密码忘了怎么办 字画装框的时候起褶皱怎么办 指甲油抹在手上不在指甲上怎么办 我把油画的布割破了怎么办 胜战本领怎么看、走上战场怎么办 胜战本领怎么看 走上战场怎么办 数码相机拍出的相片亮度太亮怎么办 国考照片错了怎么办招生办能改吗 国考英语准考证名字错了怎么办 玻尿酸打鼻子双眼间距好怪怎么办 喝咖啡后胃不舒服想吐怎么办 分期付款买的车不想还款了怎么办 考试时打小抄被同学发现怎么办 生完二胎计生办强制要求上环怎么办 没办二代身份证户口被注销怎么办 川航特价儿童票名字写错怎么办 川航机票名字错一个字怎么办 买飞机票名字打错了一个字怎么办