畅通工程续(Dijkstra)

畅通工程续(Dijkstra)

Problem Description
某省自从实行了很多年的畅通工程计划后,终于修建了很多路。不过路多了也不好,每次要从一个城镇到另一个城镇时,都有许多种道路方案可以选择,而某些方案要比另一些方案行走的距离要短很多。这让行人很困扰。

现在,已知起点和终点,请你计算出要从起点到终点,最短需要行走多少距离。

Input
本题目包含多组数据,请处理到文件结束。 每组数据第一行包含两个正整数N和M(0

Output
对于每组数据,请在一行里输出最短需要行走的距离。如果不存在从S到T的路线,就输出-1.

Sample Input
3 3
0 1 1
0 2 3
1 2 1
0 2
3 1
0 1 1
1 2

Sample Output
2
-1

本题和我之前写的最短路是一个类型题目,都可以用Dijkstra算法解决,不过需要做一个小小的贴别处理,关于Dijkstra算法,可以查看我另一篇最短路,查看伪代码。
传送门:https://blog.csdn.net/u012310622/article/details/97949272

#include
#include
#include
#include
using namespace std;
const int INF = 0x3f3f3f3f;

int n, m;
int s, t;
int vis[10000];
int d[10000];
int w[10000][10000];

void Dijkstra()
{
	memset(vis, 0, sizeof(vis));
	for (int i = 0; i > x >> y >> z;
			if(z2这条路,
			可能会输入几次,这个时候,我们需要用if来判断,
			再次输入的这个值和上一次输入的值大小比较,选择较小的路径去更新数组中的点,
			以此来保证,所有录入的路径都是最短的。*/
			w[x][y] = w[y][x]=z;
		}
		cin >> s >> t;
		Dijkstra();
		if(d[t]!=0x3f3f3f3f)
			printf("%d\n", d[t]);
		else
			printf("-1\n");
	}
}

你可能感兴趣的:(ACM,C++)