HDOJ 1874 畅通工程续 【dijkstra】

题意:。。。

策略:最简单的求最短路径.

代码:

#include<stdio.h>
#include<string.h>
#define MAXN 1005
#define INF 0x3f3f3f3f
int di[MAXN], vis[MAXN], n, m;
int map[MAXN][MAXN];
void dijkstra(int v)
{
	int i, j;
	memset(vis, 0, sizeof(vis));
	di[v] = 0;
	vis[v] = 1;
	for(i = 0; i < n; i ++){
		if(!vis[i]){
			di[i] = map[v][i];
		}
	}
	for(i = 1; i < n; i ++){
		int min = INF;
		int min_pos = 0;
		for(j =0; j < n; j ++ ){
			if(!vis[j]&&min > di[j]){
				min_pos = j;
				min = di[j];
			}
		}
		vis[min_pos] = 1;
		for(j = 0; j < n; j ++){
			if(!vis[j]&&di[j] > di[min_pos]+map[min_pos][j]){
				di[j] = di[min_pos]+map[min_pos][j];
			}
		}
	}
}
int main()
{
	int i, j, a, b, c, st, en;
	while(scanf("%d%d", &n, &m) == 2){
		memset(map, 0, sizeof(map));
		for(i = 0; i < n; i ++){
			for(j = 0; j < n; j ++){
				map[i][j] = i == j?0:INF;
			}
		}
		for(i = 0; i < m; i ++){
			scanf("%d%d%d", &a, &b, &c);
			if(map[a][b]>c||!map[a][b]){
				map[a][b] = map[b][a] = c;
			}
		}
		scanf("%d%d", &st, &en);
		dijkstra(en);
		if(di[st] != INF)
		printf("%d\n", di[st]);
		else
		printf("-1\n");
	}
	return 0;
}

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874

HDOJ 1874 畅通工程续 【dijkstra】

时间: 2024-11-08 10:48:45

HDOJ 1874 畅通工程续 【dijkstra】的相关文章

ACM: HDU 1874 畅通工程续-Dijkstra算法

HDU 1874 畅通工程续 Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多

hdu 1874 畅通工程续 Dijkstra

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1874 题目分析:输入起点和终点,顶点的个数,已连通的边. 输出起点到终点的最短路径,若不存在,输出-1. 注意事项:1.可能有多条路径  2.要判断不存在连通路径的情况 /*畅通工程续 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 31092

hdoj 1874 畅通工程续【最短路的3种方法】

畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 37272    Accepted Submission(s): 13759 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行

HDU 1874 畅通工程续(dijkstra+优先队列)

畅通工程续 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束.每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目.

hdu 1874 畅通工程续 dijkstra算法

点击打开链接题目链接 畅通工程续 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 29275    Accepted Submission(s): 10660 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某

hdoj 1874 畅通工程续【SPFA】

畅通工程续 Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submission(s) : 62   Accepted Submission(s) : 48 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多

hdu 1874 畅通工程续 (Dijkstra or Floyd or Dfs)

Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰.现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束. 每组数据第一行包含两个正整数N和M(0<N<200,0<M<1000),分别代表现有城镇的数目和已修建的道路的数目.城镇分别以0

【裸单源最短路:Dijkstra算法两种版本】hdu 1874 畅通工程续

Source : hdu 1874 畅通工程续 http://acm.hdu.edu.cn/showproblem.php?pid=1874 Problem Description 某省自从实行了很多年的畅通工程计划后,终于修建了很多路.不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多.这让行人很困扰. 现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离. Input 本题目包含多组数据,请处理到文件结束.

1874畅通工程续(dijkstra算法)

迷糊了好长时间,一开始有好多不理解的,到现在还没完全理清,不过比上午好多了,感觉不错, #include<iostream> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n,m; const int maxn = 210; const int maxm = 2010; const int inf = 0x3f3f3f3f; typedef pai