蒟蒻求救!
查看原帖
蒟蒻求救!
339299
osfly楼主2021/2/27 22:26

蒟蒻第一次写dijkstra,连样例都过不了,求大佬帮助!

#include<cstdio>
#include<cstring>
using namespace std;
int g[10100][10100];
int dis[10100];
bool book[10100];
int minn;
int n,m,s;
int u,v,w;
int min(int a,int b)
{
	if(a>b) return a;
	return b;
}
int main()
{
	memset(g,0x3f3f3f3f,sizeof(g));
	scanf("%d%d%d",&n,&m,&s);
	g[s][s]=0;
	for(int i=0;i<m;i++)
	{
		scanf("%d%d%d",&u,&v,&w);
		if(g[u][v]!=0) g[u][v]=min(g[u][v],w);
		else g[u][v]=w;
	}
	for(int i=1;i<=n;i++) dis[i]=g[s][i];
	book[s]=true;
	for(int i=1;i<=n-1;i++)
	{
		minn=0x3f3f3f3f;
		for(int j=1;j<=n;j++)
		{
			if(!book[j]&&dis[j]<minn)
			{
				u=j;
				minn=dis[j];
			}
		}
		book[u]=true;
		for(int v=1;v<=n;v++)
		{
			if(g[u][v]<0x3f3f3f3f)
				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]);
	return 0;
}
2021/2/27 22:26
加载中...