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

  

其实也就是出队入队的不同而已;

posted @ 2014-10-27 10:14  polebug  阅读(227)  评论(0编辑  收藏  举报