HDU 1874-暢通工程續(Dijkstra+優先隊列),hdu1874-

來源:互聯網
上載者:User

HDU 1874-暢通工程續(Dijkstra+優先隊列),hdu1874-
暢通工程續Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 28578    Accepted Submission(s): 10382


Problem Description某省自從實行了很多年的暢通工程計劃後,終於修建了很多路。不過路多了也不好,每次要從一個城鎮到另一個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。

現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。 
Input本題目包含多組資料,請處理到檔案結束。
每組資料第一行包含兩個正整數N和M(0<N<200,0<M<1000),分別代表現有城鎮的數目和已修建的道路的數目。城鎮分別以0~N-1編號。
接下來是M行道路資訊。每一行有三個整數A,B,X(0<=A,B<N,A!=B,0<X<10000),表示城鎮A和城鎮B之間有一條長度為X的雙向道路。
再接下一行有兩個整數S,T(0<=S,T<N),分別代表起點和終點。 
Output對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從S到T的路線,就輸出-1.
 
Sample Input

3 30 1 10 2 31 2 10 23 10 1 11 2
 
Sample Output
2-1優先隊列水過,注意判斷路不通
#include <cstdio>#include <iostream>#include <algorithm>#include <cstring>#include <vector>#include <queue>#include <set>using namespace std;const int INF=1<<27;const int maxn=1000;int dis[maxn],m,n;typedef struct node{int p,w;node (int a,int b){p=a;w=b;}friend bool operator <(node a,node b){if(a.w!=b.w) return a.w<b.w;return a.p<b.p;}};vector <node> eg[maxn];void Dijkstra(int src){for(int i=0;i<n;i++) dis[i]=INF;dis[src]=0;priority_queue <node> Q;Q.push(node(src,dis[src]));while(!Q.empty()){node v=Q.top();Q.pop();for(int i=0;i<eg[v.p].size();i++){node t=eg[v.p][i];if(dis[t.p]>t.w+v.w){dis[t.p]=t.w+v.w;Q.push(node(t.p,dis[t.p]));}}}}int main(){int u,v,w;while(cin>>n>>m){for(int i=0;i<n;i++)eg[i].clear();while(m--){cin>>u>>v>>w;eg[u].push_back(node(v,w));eg[v].push_back(node(u,w));}int src,en;cin>>src>>en;Dijkstra(src);if(dis[en]<INF)cout<<dis[en]<<endl;elsecout<<"-1"<<endl;}return 0;}




HDU1874 用基於優先隊列的Dijkstra寫

你用queue寫看有沒問題嘛,WA可能是你有些特殊情況沒考慮呢,用priority_queue和queue用法和思想差不多。
反正Dijkstra演算法就是一種貪心演算法嘛,用priority_queue把距離短的路徑排在前面。
 
hdu acm 1874 暢通工程續 可以用並查集做?怎起點終點距離 ?

樓上說的是最小產生樹,
樓主說的最短路= =。。
正在看最短路, 好像沒提到用並查集。。
資料結構書上 和 演算法導論 都只給出了 dijkstra,floyd這兩種演算法演算法
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.