样例过了,为什么全WA了,刚学的Dijkstra一点自信都没了QAQ
查看原帖
样例过了,为什么全WA了,刚学的Dijkstra一点自信都没了QAQ
452262
渡墨残殇楼主2021/10/8 14:04
#include<iostream>
#include<cstring>
#include<algorithm>
#define mm 20000001
#define inf 0x7f
using namespace std;
int n,m,s,cnt;
int h[2000001],dis[mm];
bool visit[mm];
struct Edge{
	int to,w,next;
}edge[2000001];
void init ()
{
	memset(visit,0,sizeof(visit));
	memset(dis,inf,sizeof(dis));
	memset(h,-1,sizeof(h));
}
void add(int u,int v,int w)
{
	edge[cnt].to=v,edge[cnt].w=w,edge[cnt].next=h[u],h[u]=cnt++;
}
void pintf()
{
	for(int i=1;i<=n;i++)
	{
		/*if(dis[i]==0x7f)
		cout<<"2147483647";
		else */
		cout<<dis[i]<<' ';
	}
}
void Dijkstra()
{
	int minn,pos;
	while(1)
	{
		minn=inf,pos=-1;
		for(int i=1;i<=n;i++)
		{
			if(!visit[i]&&dis[i]<minn)
			{
				minn=dis[i],pos=i;
			}
		}
		if(pos==-1)break;
		visit[pos]=1;
		for(int i=h[pos];i!=-1;i=edge[i].next)
		{
			int t=edge[i].to;
			if(!visit[t]&&dis[t]>dis[pos]+edge[i].w)
			dis[t]=dis[pos]+edge[i].w;
		}
	}
	return ;
}
int main ()
{
	cin>>n>>m>>s;
	init();
	for(int i=1;i<=m;i++)
	{
		int a,b,c;
		cin>>a>>b>>c;
		add(a,b,c);
	}
	dis[s]=0;
	Dijkstra();
	pintf();
	return 0;
}
2021/10/8 14:04
加载中...