queue,指针求最短路的区别
这里以spfa为例;//都用邻接表存边;
指针:
int h=1,t=1; q[h]=x; while(h<=t){ int u=q[h]; vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].to; if(dist[v]>dist[u]+e[i].w){ dist[v]=dist[u]+e[i].w; if(!vis[v]){ vis[v]=1; q[++t]=v; } } } h++; }
queue
void spfa(int x){ queue<int> q; q.push(x); memset(vis,true,sizeof(vis)); while(!q.empty()){ int u=q.front(); q.pop; vis[u]=0; for(int i=head[u];i!=-1;i=e[i].next){ int v=e[i].to; if(dist[v]>dist[u]+e[i].w){ dist[v]=dist[u]+e[i].w; if(!vis[v]){ vis[v]=1; q.push(v); } } } } }
其实也就是出队入队的不同而已;