您的位置:首页 > 其它

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];
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: