这是一个用优先队列实现的最短路径dijkstra算法(已经实现两点间最短距离),怎样才能也显示路径上经过的点呢
来源:互联网 发布:mac git 添加文件夹 编辑:程序博客网 时间:2024/05/18 02:04
//minimal path use priority queue
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
#define INF 200
#define MAXN 1100
struct way
{
int s;
int d;//distance
bool operator <(const way k)const
{
return k.d<d;//sort from small to big
}
};
int n;
int map[MAXN][MAXN];
int point[MAXN][MAXN];//point[i][j] means the minimal path from i to j
void dijk(int endpoint)//dijk find minimal distance between each point to endpoint
{
priority_queue<way>Q;
bool flag[MAXN]={false};//flag[i]==1 means it is in the end point set
way temp,now;
now.s=endpoint;
now.d=0;
Q.push(now);
point[endpoint][endpoint]=0;
while(!Q.empty())
{
now=Q.top();
Q.pop();//use priority queue to ensure pop the point with minimal distance every time
if(flag[now.s])
continue;
flag[now.s]=1;
for(int i=1;i<=n;i++)//从终点往回推
{
if(!flag[i]&&map[now.s][i]!=INF&&point[i][endpoint]>point[now.s][endpoint]+map[i][now.s])
{
temp.s=i;
temp.d=point[now.s][endpoint]+map[i][now.s];
point[i][endpoint]=temp.d;
prev[endpoint]=i;
Q.push(temp);
}
}
}
}
void init()//初始化
{
int i,j;
int a,b,c;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
point[i][j]=INF;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
scanf("%d",&map[i][j]); //输入图网的简单矩阵
}
int main()
{
int m;
while(scanf("%d",&n)!=EOF&&n!=0) //输入简单图中节点个数
{
init();
for(int i=1;i<=n;i++)
dijk(i);//find minimal distance between each point to endpoint
int a,b;
while(scanf("%d%d",&a,&b))
{
if(a==0&&b==0)
{
cout<<endl;
break;
}
else
printf("%d/n",point[a][b]); //通过输入两个端点显示两点间最短路径长度
}
}
return 0;
}
- 这是一个用优先队列实现的最短路径dijkstra算法(已经实现两点间最短距离),怎样才能也显示路径上经过的点呢
- 已经实现了最短距离的优先队列dijkstra算法,怎么回溯出最短距离路线上经过的点呢?
- Dijkstra [迪杰斯特拉]算法思路(求单点到其他每个点的各个最短路径)Floyd算法:任意两点间最短距离
- Dijkstra算法的最短路径实现
- dijkstra最短路径算法的实现
- 迪杰斯特拉算法处理无向图中最短路径的(dijkstra)Java实现(指定两点,求最短距离及路径)
- Dijkstra算法实现从一个源点到其他各点的最短路径
- 用Python实现Dijkstra算法用来寻找两点之间的最短路径 (Implementation of Dijkstra in Python)
- hdu3790 最短路径问题(dijkstra/优先队列实现)
- Dijkstra算法,单源最短路径(一个起点到各个点的最短距离)
- HDOJ 3790 最短路径问题 (dijkstra算法的优化,优先队列)
- dijkstra算法--求两点之的最短路径
- Dijkstra单源最短路径实现 及 Floyd任意两点之间的最短路径
- 图的最短路径算法(Dijkstra,Floyd)的实现
- Dijkstra 最短路径算法的一种高效率实现
- 单源点最短路径Dijkstra算法的JAVA实现
- 单源点最短路径Dijkstra算法的JAVA实现
- 最短路径Dijkstra算法的JAVA实现--转载
- SQL Server 里的日期和时间函数
- 开blog之意
- CMWAP和CMNET 的主要区别与适用范围
- 直接硬盘安装MeeGo到上网本或IVI车载设备上
- Java核心技术(高级Swing)四进度指示器
- 这是一个用优先队列实现的最短路径dijkstra算法(已经实现两点间最短距离),怎样才能也显示路径上经过的点呢
- 学习jquery应该了解的几篇文章
- 学习jquery应该了解的几篇文章
- ActionForm的Date处理问题
- 通过堆栈找到crash的地方
- ActionForm的Date处理问题
- 正则表达式日期时间匹配
- Linux下Apache与PHP安全相关设置
- 绪论