C++ DijkStra最短路径(输出两点间最短路径与线路)

因为Dijkstra迪杰斯特拉算法每次都是从当前点计算出到所有相邻且未访问过的点的距离,再从中选出距离最小的点加入变成已访问。所以该思想类似于广度优先遍历BFS。

参考链接如下:

(1)图算法之最短路径(Dijkstra)

(2)DijkStra最短路径的C++实现与输出路径

  (3)  柳诺-【最短路径】之Dijkstra算法

(4) DijkStra最短路径的C++实现与输出路径

实现:

C++ DijkStra最短路径(输出两点间最短路径与线路)_第1张图片

代码如下:

/*输入:
5 6
0
0 1 1
0 2 2
0 3 1
1 2 1
2 4 1
3 4 1 


或 
6 9
0
0 1 1
0 2 12
1 2 9
1 3 3
2 4 5
3 2 4
3 4 13
3 5 15
4 5 4
*/


#include 
#include 
#include 
using namespace std;

#define N 520
int edge[N][N],weight[N],disp[N];

bool visited[N] = {false};
const int inf = 999999;

int main(){
	int prev[N];//用来标注当前结点的上一个结点,以便输出两点间最短路线 
	
	fill(edge[0],edge[0] + N * N,inf);//注意这里要是N*N,要不然不是全部 
	fill(disp,disp + N,inf);
	
	
	int n,m;//对应城市数,城市之间连线数
	cin>>n>>m;
	
	int start_point;
	cin>>start_point;//输入起点城市 
	
	int a,b,c;
	for(int i=0;i < m;i++)
	{
		cin>>a>>b>>c;
		edge[a][b] = edge[b][a] = c; 	
	}
	
	for(int i=0;i>end_point; 
	stack myStack;
	
	int temp = end_point;
	myStack.push(end_point);//先加终点 
	while(start_point != temp){
		temp = prev[temp];
		myStack.push(temp);//注意这里是把当前点的上一个结点放进去,此时换成了temp 
	}
	
	cout<<"起点"<

 

 

你可能感兴趣的:(C++,算法)