Dijstra单源最短路【模板】(裸的,邻接矩阵)

Dijstra单源最短路【模板】(裸的,邻接矩阵)

例题:洛谷-热浪

附:最详细的讲解

代码:

#include <iostream>
#include <cstdio>

using namespace std;

const int inf = 1e9 + 7;
const int N = 2357;

int n,m,s,e[N][N],dis[N],u,v,w;
bool vis[N];

int main()
{
	scanf("%d%d%d",&n,&m,&s);
	for(int i = 1; i <= n; i ++)
		for(int j = 1; j <= n; j ++)
			if(i != j)e[i][j] = inf;
	for(int i = 1; i <= m; i ++)
	{
		scanf("%d%d%d",&u,&v,&w);
		e[u][v] = min(e[u][v],w);
	}
	for(int i = 1; i <= n; i ++)
		dis[i] = e[s][i];
	vis[s] = 1;
	for(int i = 1; i < n; i ++)
	{
		int minn = inf;
		for(int j = 1; j <= n; j ++)
		{
			if(dis[j] < minn && vis[j] == 0)
			{
				minn = dis[j];
				u = j;
			}
		}
		vis[u] = 1;
		for(v = 1; v <= n; v ++)
			dis[v] = min(dis[v],dis[u]+e[u][v]);
	}
	for(int i = 1; i <= n; i ++)
		printf("%d ",dis[i]);
	return 0;
}

时间复杂度:Θ(n^2)

猜你喜欢

转载自blog.csdn.net/Mr_S_Edward/article/details/83833196
今日推荐