比赛 板子大赛 评测结果 AAAAAA
题目名称 单源最短路 最终得分 100
用户昵称 喵喵喵 运行时间 0.018 s
代码语言 C++ 内存使用 3.55 MiB
提交时间 2025-01-22 09:17:21
显示代码纯文本
#include <bits/stdc++.h>
#define inf 0x3f3f3f3f
using namespace std;
int g[105][105];
int dis[105],book[105];
int n,m,s,u,v,least;
int main()
{
	freopen("path.in","r",stdin);
	freopen("path.out","w",stdout);
	scanf("%d%d%d",&n,&m,&s);
	for(int i = 1;i <= n;i++)
	{
		for(int j = 1;j <= n;j++)
		{
			if(i == j)
			{
				g[i][j] = 0;
			}
			else
			{
				g[i][j] = inf;
			}
		}
	}
	for(int i = 0;i < m;i++)
	{
		int x,y,w;
		scanf("%d%d%d",&x,&y,&w);
		g[x][y] = w;
		g[y][x] = w;
	}
	for(int i = 1;i <= n;i++)
	{
		dis[i] = g[s][i];
	}
	for(int i = 1;i <= n;i++)
	{
		book[i] = 0;
	}
	book[s] = 1;
	for(int i = 1;i <= n;i++)
	{
		least = inf;
		for(int j = 1;j <= n;j++)
		{
			if(book[j] == 0 && dis[j] < least)
			{
				least = dis[j];
				u = j;
			}
		}
		book[u] = 1;
		for(v = 1;v <= n;v++)
		{
			if(g[u][v] < inf)
			{
				if(dis[v] > dis[u] + g[u][v])
					dis[v] = dis[u] + g[u][v];
			}
		}
	}
	for(int i = 1;i <= n;i++)
	{
		printf("%d ",dis[i]);
	}
}