2019 GDUT 新生专题Ⅲ选集 J题 畅通工程续

J - 畅通工程续

链接

题目描述
给出若干个城镇与若干条城镇间的道路的长度,求从指定城镇A到指定城镇B的最短路。

题目分析
由题意可知,这是一道多源最短路问题,套用Floyd算法即可。
值得注意的是,题目没有说两个城镇之间只建一条路,因此输入时要注意。

代码

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

int dis[200][200];//采用邻接矩阵
int n,m,_start,_end;
const int MAX=1e9;

void init()//初始化
{
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){
			if(i==j) dis[i][j]=0;
			else dis[i][j]=MAX;
		}
	}
}

void floyd()
{
	for(int k=0;k<n;k++){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
				dis[j][i]=dis[i][j];
			}
		}
	}
}

int main()
{
	while(scanf("%d%d",&n,&m)!=EOF){
		init();
		for(int i=0;i<m;i++){
			int a,b,temp;
			scanf("%d%d%d",&a,&b,&temp);
			//注意这两个城镇之间是否有更短的路了
			if(dis[a][b]==MAX||dis[a][b]>temp){
				dis[a][b]=temp;
				dis[b][a]=temp;
			}
		}
		floyd();
		scanf("%d%d",&_start,&_end);
		if(dis[_start][_end]==MAX) printf("-1\n");
		else printf("%d\n",dis[_start][_end]);
	}
	return 0;
}
发布了24 篇原创文章 · 获赞 1 · 访问量 674

猜你喜欢

转载自blog.csdn.net/palax0/article/details/104016722