dij不理解哪t了
查看原帖
dij不理解哪t了
696045
dyyyyyczyz楼主2023/7/18 01:28
#include<bits/stdc++.h>
using namespace std;
bool vi[1000001];
bool ca;
int n,m,st,head[1000001],cnt=1,dis[1000001],p;
struct Edge
{
	int next,to,w;	
}edge[1000001];
int s[1000001],e[1000001],l[1000001];
void add(int fr,int to,int x)
{
	edge[1].next=0;
	edge[cnt].w=x;
	edge[cnt].to=to;
	edge[cnt].next=head[fr];
	head[fr]=cnt++;
}

int main()
{
	int i;
	cin>>n>>m>>st;
	head[1]=st;
	for (i=1;i<=m;i++)
	{
		cin>>s[i]>>e[i]>>l[i];
		add(s[i],e[i],l[i]);
	}
	for (i=1;i<=n;i++)
	{
		dis[i]=2147483647;
	}
	dis[st]=0;
	p=st;
	while (vi[p]==0)
	{
		int c=2147483647;
		vi[p]=1;
		for (i=head[p];i!=0;i=edge[i].next)
		{
			if (vi[edge[i].to]==0&&dis[edge[i].to]>dis[p]+edge[i].w)
			{
				dis[edge[i].to]=dis[p]+edge[i].w;
			}
		}
		for (i=1;i<=m;i++)
		{
			if(dis[i]<c&&vi[i]==0)
			{
			c=dis[i];
			p=i;
			}
		}
	}
	for (i=1;i<=n;i++)
	{
		if (dis[i]==0&&i!=st)ca=1;
	}
	if (ca!=1)
	{
		for (i=1;i<=n;i++)
	{
		cout<<dis[i]<<" ";
	}
	}
	else cout<<"2147483647";
	
	return 0;
	}

都改的六亲不认了,马上越看越像题解还是4个a6个t,我都看不出来和题解有什么区别了,干脆我把题解交上去看看会不会t。 要么就是数据加强和有重边的问题,那么建议题解更新一下。

2023/7/18 01:28
加载中...