这样写会WA#6,最短路长度是对的,但统计的路径数不对
inline void Dijkstra(void)
{
memset(d,0x3f,sizeof(d));
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
q.push(make_pair(d[1]=0,1));
vis[1]=true,f[1]=1;
while(!q.empty())
{
int u=q.top().second;
q.pop();
for(register int i=1;i<=n;++i)
if(d[i]>d[u]+g[u][i])
{
f[i]=f[u];
d[i]=d[u]+g[u][i];
if(!vis[i]) q.push(make_pair(d[i],i));
vis[i]=true;
}
else if(d[i]==d[u]+g[u][i]) f[i]+=f[u];
}
}
这样就是对的
inline void Dijkstra(void)
{
memset(d,0x3f,sizeof(d));
priority_queue<pair<int,int>,vector<pair<int,int> >,greater<pair<int,int> > >q;
q.push(make_pair(d[1]=0,1));
f[1]=1;
while(!q.empty())
{
int u=q.top().second;
q.pop();
if(vis[u]) continue;
vis[u]=true;
for(register int i=1;i<=n;++i)
if(d[i]>d[u]+g[u][i])
{
f[i]=f[u];
d[i]=d[u]+g[u][i];
q.push(make_pair(d[i],i));
}
else if(d[i]==d[u]+g[u][i]) f[i]+=f[u];
}
}
望大佬指教