dijkstra求最短路思想与模板
2016-08-09 17:05
260 查看
Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。时间复杂度O(N^2);注意:1,不能求含有负权的图,含有负权可以采Bellman-ford和SPFA算。2.不能直接求单源最长路径
具体算法实现,传送门点击打开链接下面是代码模板
void dijkstra(int u)//u为起点,n为点的个数 { int used[100];//标记访问过的点 int dis[100];//记录各个点到起点的最短距离 memset(used,0,sizeof(used));//初始化,0为未访问,1为访问过 memset(dis,INF,sizeof(dis));//初始距离为无穷大 int pos=u;//pos为起点 for(i=0;i<n;i++) dis[i]=map[u][i]; //给起点到各个点的距离赋值 used[u]=1; ///标记起点已经访问过 for(i=1;i<n;i++)//再找n-1个点 { int min=INF;//定义个最小距离,初始值为无穷大 for(j=0;j<n;j++)//找到距离起点最近的点 if(!used[j]&&dis[j]<min) { min=dis[j]; pos=j;//pos更新为最近点 } used[pos]=1;//标记最近点为访问过 for(j=0;j<n;j++)//把dis数组更新,也叫松弛 if(!used[j]&&dis[j]>map[pos][j]+dis[pos]) dis[j]=map[pos][j]+dis[pos]; } }
相关文章推荐
- HDU 1466 计算直线的交点数 (DP)
- KMP算法求公共回文子串的个数
- ansible 批量推送 ansible_ssh_pass + ansible_sudo_pass+ become 使用案例
- C语言中的各种输入函数整理
- 【U8】查询明细账显示两行合计与累计
- Java算法——求1到100累加的和,3种循环
- 阿里云宣布开放开源 AliSQL 数据库 性能可提升 70%
- jquery 判断手势滑动方向(上下左右)
- Ubuntu 14.04 SSH + 远程登录xrdp
- 进程和线程的区别
- ModelAndView 配置后,controller方法
- Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
- 使用 flow.ci 实现 Android 自动化测试与持续集成
- 局部变量、全局变量、堆栈、静态变量
- Makefile学习实例1
- 随机森林与GBT算法介绍
- JSP Session
- 基于zookeeper实现分布式锁
- opencv自带检测器检测fddb数据库以及evaluate
- iOS推送