dijkstra 最短路径算法(HDU - 2544 )

版权声明:如若转载请标明出处 https://blog.csdn.net/hwy499/article/details/90721904

dijkstra 最短路算法模板(以HDU - 2544 为例)

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int MAXN = 105;
const int INF = 0x3f3f3f3f;
int map[MAXN][MAXN];
int N,M;
int dis[MAXN];
bool vis[MAXN];
void init(int N){//初始化邻接矩阵 
	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;
			}
		}
	}
}
void dij(int start){//dijkstra算法 -- strat是源点 
	memset(dis,INF,sizeof(dis));
	memset(vis,false,sizeof(vis));
	dis[start] = 0;
	for(int i = 1; i <= N; i++){
		int mind = INF,u = -1;
		for(int j = 1; j <= N; j++){
			if(!vis[j]&&dis[j]<mind){
				u = j;
				mind = dis[j];
			}
		}
		vis[u] = true;
		for(int j = 1; j <= N; j++){
			if(dis[u]+map[u][j]<dis[j]){
				dis[j] = dis[u]+map[u][j];
			}
		}
	}
}
int main(){
	while(~scanf("%d%d",&N,&M)&&(N+M)!=0){
		init(N);
		int x,y,v;
		for(int i = 1; i <= M; i++){
			scanf("%d %d %d",&x,&y,&v);
			map[x][y] = (map[x][y] < v) ? map[x][y]:v;
			map[y][x] = (map[y][x] < v) ? map[y][x]:v;
		}
		dij(1);
		cout<<dis[N]<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/hwy499/article/details/90721904