藍橋杯 算法訓練 最短路(最短路模板)



  • 思路:最短路模板題,出錯了一次,沒有全部清空導致出錯。

  • 代碼:
    #include<bits/stdc++.h>
    using namespace std;
    
    const int maxn = 200000+10;
    int n,m;
    int d[maxn];
    vector< pair<int,int> > E[maxn];
    
    void init(){
    	for(int i=0;i<maxn;i++)	d[i]=1e9;		
    	for(int i=0;i<maxn;i++)	E[i].clear();
    }
    void dijkstra(){		 
    	d[1]=0;
    	priority_queue< pair<int,int> > q;
    	q.push( make_pair(-d[1],1) );
    	while(!q.empty()){
    		int u=q.top().second;
    		q.pop();
    		for(int i=0;i<E[u].size();i++){
    			int v=E[u][i].first;
    			if(d[v]>d[u]+E[u][i].second){
    				d[v]=d[u]+E[u][i].second;
    				q.push(make_pair(-d[v],v));
    			}
    		}
    	}
    }
    int main(){
    	while(cin>>n>>m){
    		init();
    		for(int i=0;i<m;i++){
    			int a,b,x;
    			cin>>a>>b>>x;
    			E[a].push_back(make_pair(b,x));
    		}
    		dijkstra();
    		for(int i=2;i<=n;i++){
    			printf("%d\n",d[i]);
    		}
    	}	
    	return 0;
    }



注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com