关于Dikjstra
  • 板块学术版
  • 楼主suisdavid
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/2/3 20:09
  • 上次更新2023/10/24 01:50:40
查看原帖
关于Dikjstra
748327
suisdavid楼主2023/2/3 20:09

两种Dikjstra写法。第一种是正确的,第二种是错误的。但不知道两者有什么区别。求助。

void Dikjstra(int i)
{
	memset(vis,0,sizeof(vis));
	Q.push(make_pair(0,i));
	while (!Q.empty())
	{
		pair<long long,int>p=Q.top();Q.pop();
		long long d=p.first;int u=p.second;
		if (vis[u])
		{
			continue;
		}
		vis[u]=1;
		int sz=G[u].size();
		for (int j=0;j<sz;j++)
		{
			int v=G[u][j].first;long long w=G[u][j].second;
			if (d+w<dist[i][v])
			{
				dist[i][v]=d+w;
				if (!vis[v])
				{
					Q.push(make_pair(dist[i][v],v));
				}
			}
		}
	}
}
``````cpp
void Dikjstra(int i)
{
	memset(vis,0,sizeof(vis));
	Q.push(make_pair(0,i));
	vis[i]=1;
	while (!Q.empty())
	{
		pair<long long,int>p=Q.top();Q.pop();
		long long d=p.first;int u=p.second;
		int sz=G[u].size();
		for (int j=0;j<sz;j++)
		{
			int v=G[u][j].first;long long w=G[u][j].second;
			if (d+w<dist[i][v])
			{
				dist[i][v]=d+w;
				if (!vis[v])
				{
					vis[v]=1;
					Q.push(make_pair(dist[i][v],v));
				}
			}
		}
	}
}

void Dikjstra(int i)
{
	memset(vis,0,sizeof(vis));
	Q.push(make_pair(0,i));
	vis[i]=1;
	while (!Q.empty())
	{
		pair<long long,int>p=Q.top();Q.pop();
		long long d=p.first;int u=p.second;
		int sz=G[u].size();
		for (int j=0;j<sz;j++)
		{
			int v=G[u][j].first;long long w=G[u][j].second;
			if (d+w<dist[i][v])
			{
				dist[i][v]=d+w;
				if (!vis[v])
				{
					vis[v]=1;
					Q.push(make_pair(dist[i][v],v));
				}
			}
		}
	}
}
2023/2/3 20:09
加载中...