最短路问题---Dijkstra算法学习

Dijkstra又称单源最短路算法,就从一个节点到其他各点的最短路,解决的是有向图的最短路问题

此算法的特点是:从起始点为中心点向外层层扩展,直到扩展到中终点为止。

该算法的条件是所给图的所有边的权值非负。

实现的Dijkstra的过程其实也是一种贪心。

其实把下图看懂,基本Dijkstra的实现流程就差不多了

最短路问题---Dijkstra算法学习_第1张图片

算法流程如图:

最短路问题---Dijkstra算法学习_第2张图片

算法代码:

#include
#include
#include
#include
#include
using namespace std;
const int maxn = 1010;
const int INF = 0x3f3f3f3f;
int Map[maxn][maxn], vis[maxn], dis[maxn];
int n, m;

void init() {
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= n; j++) {
			if (i == j)Map[i][j] = 0;
			else Map[i][j] = INF;
		}
	}
	memset(vis, 0, sizeof(vis));//标记初始化 
}

void input() {
	int u, v, w;
	for (int i = 0; i> u >> v >> w;
		if (Map[u][v]>w) {
			Map[u][v] = Map[v][u] = w;
		}
	}
}

void Dijkstra() {
	for (int i = 1; i <= n; i++) {//把和源点相连的点的边权记录到dis数组中 
		dis[i] = Map[1][i];
	}
	vis[1] = 1;
	for (int i = 1; i <= n; i++) {
		int MIN = INF, x = -1;
		for (int j = 1; j <= n; j++) {
			if (!vis[j] && dis[j]> n >> m) {
		init();//初始化 
		input();//输入 
		Dijkstra();//算法过程 
		output();//输出  
	}
	return 0;
}

 

 

 

 

你可能感兴趣的:(学习笔记,图论)