社区讨论
关于Dikjstra
学术版参与者 5已保存回复 6
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 6 条
- 当前快照
- 1 份
- 快照标识符
- @lo371c8i
- 此快照首次捕获于
- 2023/10/24 01:50 2 年前
- 此快照最后确认于
- 2023/10/24 01:50 2 年前
两种Dikjstra写法。第一种是正确的,第二种是错误的。但不知道两者有什么区别。求助。
CPPvoid 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 条回复,欢迎继续交流。
正在加载回复...