hdu 2544——最短路 (spfa)

來源:互聯網
上載者:User
Problem Description在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以協助他們嗎?

 

Input輸入包括多組資料。每組資料第一行是兩個整數N、M(N<=100,M<=10000),N表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為N的路口是賽場所在地,M則表示在成都有幾條路。N=M=0表示輸入結束。接下來M行,每行包括3個整數A,B,C(1<=A,B&lt;=N,1<=C<=1000),表示在路口A與路口B之間有一條路,我們的工作人員需要C分鐘的時間走過這條路。
輸入保證至少存在1條商店到賽場的路線。 

Output對於每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間 

Sample Input

2 11 2 33 31 2 52 3 53 1 20 0
 

Sample Output

32

數組儲存邊

#include<cstdio>#include<iostream>#include<queue>using namespace std;#define INF 1000005int map[105][105];int n,m;int vis[105];int dis[105];void spfa(){queue<int> q;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)dis[i]=INF;dis[1]=0;vis[1]=1;q.push(1);while(!q.empty()){int temp=q.front();q.pop();vis[temp]=0;for(int i=1;i<=n;i++)if(map[temp][i]!=INF&&dis[i]>dis[temp]+map[temp][i]){dis[i]=dis[temp]+map[temp][i];if(!vis[i])q.push(i),vis[i]=1;}}printf("%d\n",dis[n]);}int main(){while(~scanf("%d%d",&n,&m)&&n+m){for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)map[i][j]=INF;for(int i=1;i<=m;i++){int a,b,c;scanf("%d%d%d",&a,&b,&c);map[a][b]=map[b][a]=c;}spfa();}}


鏈表格儲存體

#include<cstdio>#include<iostream>#include<queue>using namespace std;#define INF 1000005int n,m;int next[10005],v[10005],w[10005];int head[105];int vis[105];int dis[105];void spfa(){queue<int> q;memset(vis,0,sizeof(vis));for(int i=1;i<=n;i++)dis[i]=INF;dis[1]=0;vis[1]=1;q.push(1);while(!q.empty()){int temp=q.front();q.pop();vis[temp]=0;for(int i=head[temp];i!=-1;i=next[i])if(!dis[temp]<INF&&dis[v[i]]>dis[temp]+w[i]){dis[v[i]]=dis[temp]+w[i];if(!vis[v[i]]){q.push(v[i]);vis[v[i]]=1;}}}printf("%d\n",dis[n]);}int main(){int eid;while(~scanf("%d%d",&n,&m)&&n+m){eid=1;memset(head,-1,sizeof(head));for(int i=1;i<=m;i++){int from,to,cost;scanf("%d%d%d",&from,&to,&cost);next[eid]=head[from];v[eid]=to;w[eid]=cost;head[from]=eid++;next[eid]=head[to];v[eid]=from;w[eid]=cost;head[to]=eid++;}spfa();}}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.