码迷,mamicode.com
首页 > Web开发 > 详细

hdu 1874 畅通工程续 dijsktra(基础题目)

时间:2015-08-16 21:23:55      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:

又是一道最短路基础题目,注意两点就可以了:

1.输入的时候可能会两点之间有多条路,选最短的存起来。

2.判断有没有路径存在,可以判断一下终点到起点的距离是否小于原来初始化的最大值,如果是就输出结果,否则输出-1

代码:

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<vector>
#include<set>
#include<string>
#include<algorithm>
#define MAX 10010000

using namespace std;
int d[205];
int gra[205][205];
int visit[205];
int n,m,s,t;
void dijkstra()
{
	int i,j;
	for(i=0; i<n; i++)
		d[i] = MAX;
	d[s] = 0;
	memset(visit,0,sizeof(visit));
	for(i=0; i<n; i++)
	{
		int x ,y = MAX;
		for(j=0; j<n; j++)
		{
			if(!visit[j] && d[j] < y)
				y = d[x = j];
		}
		visit[x] = 1;
		for(j=0; j<n; j++)
			if(!visit[j] && d[j]>d[x]+gra[x][j])
				d[j] = d[x] + gra[x][j];
	} 
	return ;
}
int main()
{
	int i,j,a,b,c;
	while(cin >> n >> m)
	{
		for(i=0; i<n; i++)
			for(j=0; j<n; j++)
				gra[i][j] = MAX;
		for(i=1; i<=m; i++)
		{
			cin >> a >> b >> c;
			if(gra[a][b] > c) 
				gra[a][b] = gra[b][a] = c;
		}
		cin >> s >> t;
		dijkstra();
		if(d[t] < MAX)
			cout << d[t] << endl;
		else
			cout << -1 << endl;
	}
	return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

hdu 1874 畅通工程续 dijsktra(基础题目)

标签:

原文地址:http://blog.csdn.net/sinat_22659021/article/details/47706291

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!