社区讨论

关于Dikjstra

学术版参与者 5已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo371c8i
此快照首次捕获于
2023/10/24 01:50
2 年前
此快照最后确认于
2023/10/24 01:50
2 年前
查看原帖
两种Dikjstra写法。第一种是正确的,第二种是错误的。但不知道两者有什么区别。求助。
CPP
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));
				}
			}
		}
	}
}

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));
				}
			}
		}
	}
}

回复

6 条回复,欢迎继续交流。

正在加载回复...