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