BIT1026 Til the Cows Come Home

赤裸裸的dijkstra 。。。。。。。。。。

求单源最短路径

就是题意很难读懂

5 5
1 2 20
2 3 30
3 4 20
4 5 20
1 5 100

样例的第一个5是指有5条路,第二个5是指有5个地点

1 2 20指从1到达2的距离为20

求从1到达5的最短路径长度

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
int street[1010][1010];
int dist[1010];
bool visited[1010];
int main()
{
	int t,n;
	scanf("%d %d",&t,&n);
	for (int i = 1; i <=n; i++)
	{
		for (int j = 1; j <=n; j++)
		{
			street[i][j]=INT_MAX;
		}
	}
	while(t--)
	{
		int a,b,val;
		scanf("%d %d %d",&a,&b,&val);
		if(val<street[a][b])
		{
			street[a][b]=val;
			street[b][a]=val;
		}
	}
	//输入完毕,邻接矩阵street,接下来使用dijkstra即可
	for(int i=2;i<=n;i++)
	{
		dist[i]=INT_MAX;
	}
	dist[1]=0;
	memset(visited,false,sizeof(visited));
	while (true)
	{
		int mini=-1;
		for(int i=1;i<=n;i++)//找到mini
		{
			if(visited[i])
			{
				continue;
			}
			if(mini==-1||dist[mini]>dist[i])
			{
				mini=i;
			}
		}
		if(mini==n)//已找到终点
		{
			break;
		}
		//对mini进行扩展
		visited[mini]=true;
		for(int i=1;i<=n;i++)
		{
			if(street[mini][i]!=INT_MAX&&dist[i]>dist[mini]+street[mini][i])
			{
				dist[i]=dist[mini]+street[mini][i];
			}
		}
	}
	printf("%d\n",dist[n]);
	return 0;
}


你可能感兴趣的:(BIT1026 Til the Cows Come Home)