欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

PAT//迪杰特斯拉算法

程序员文章站 2022-05-22 11:20:51
...

Dijkstra算法是典型的最短路径路由算法,用来计算一个节点到其他所有节点的最短路径。
思路如下:
1.初始化距离d[]
2.找到未访问的最近的值,记录下来temp;
3.以temp为基准更新d[]

C++实现如下

void DJ(int x){
	fill(d, d + maxn, INF);
	d[x] = 0;
	for (int i = 0; i < n; i++){
		int u = -1, min = INF;
		for (int j = 0; j < n; j++){
			if (inq[j]==false&&d[j] < min){
				u = j;
				min = d[j];
			}
		}//找到未访问的最近的值
		if (u == -1) return;
		inq[u] = true;//设为已经访问
		//优化更新d[]
		for (int j = 0; j < n; j++){
			if (d[u] + map[u][j] < d[j]&&inq[j]==false){
				d[j] = d[u] + map[u][j];
			}
		}
	}
	
	
}

PS1:咸鱼开始跑的时候总是不对,最后发现是map[maxn][maxn]没有初始化//这里我也不太知道为什么,定义的时候int map[maxn][maxn]={INF};并没有什么用//在main()函数里面加了一句fill(map[0],map[0]+maxn*maxn,INF)解决了问题

PS2:下一篇可能会处理多个变量的情况//(当路径最短,优先选择XX最佳的方案