日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

zoj 2526

發(fā)布時(shí)間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 zoj 2526 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最短路問(wèn)題,要求出最短路的個(gè)數(shù)。

輸出一條得到JavaBean最多的最短路徑








?

#include<stdio.h> #include<string.h> #define inf 0x3fffffff int n,m,map[510][510],dp[510],mark[510],dis[510],w[510],pre[510],link[510]; int st,ed; void dijkstra() {int i,j,k,min;memset(mark,0,sizeof(mark));//標(biāo)記房間是否走過(guò)memset(dp,0,sizeof(dp));//記錄到達(dá)位置得到最多的JavaBeanmemset(pre,-1,sizeof(pre));//記錄到達(dá)此房間的前一個(gè)房間memset(link,0,sizeof(link));//記錄到達(dá)此位置最短路的個(gè)數(shù)for(i=0;i<n;i++)dis[i]=inf;//距離起點(diǎn)的最短距離dis[st]=0;link[st]=1;dp[st]=w[st];for(i=0;i<n;i++){min=inf;k=-1;for(j=0;j<n;j++){if(!mark[j]&&min>dis[j]){min=dis[j];k=j;}}mark[k]=1;for(j=0;j<n;j++){if(mark[j]||dis[j]<dis[k]+map[k][j]||map[k][j]==inf)continue;if(dis[j]==dis[k]+map[k][j])//如果從k到達(dá)j的距離與j的最小距離相等link[j]+=link[k];//j的最短路數(shù)要加上k的else link[j]=link[k];//如果從k到達(dá)j的路短的話,到達(dá)j的最短路數(shù)就等于k的最短路數(shù)if(dis[j]>dis[k]+map[k][j]||dp[j]<dp[k]+w[j])//路徑更短或者路勁相等得到的JavaBean更多{ dis[j]=dis[k]+map[k][j];pre[j]=k;dp[j]=dp[k]+w[j];} }} } void prit(int u) {if(u==st){printf("%d",st);return;}prit(pre[u]);printf(" %d",u); } int main() {int i,j,x,y,p;while(scanf("%d%d%d%d",&n,&m,&st,&ed)!=-1){for(i=0;i<n;i++)for(j=0;j<n;j++)map[i][j]=inf;for(i=0;i<n;i++)scanf("%d",&w[i]);for(i=0;i<m;i++){scanf("%d%d%d",&x,&y,&p);if(map[x][y]>p)map[x][y]=map[y][x]=p;}dijkstra();printf("%d %d\n",link[ed],dp[ed]);prit(ed);printf("\n");}return 0; }


?

5 10 0 2
1 2 1 5 3
0 1 2
0 2 4
0 3 3
0 4 1
1 2 2
1 3 1
1 4 1
2 3 1
2 4 3
3 4 2






?

轉(zhuǎn)載于:https://www.cnblogs.com/dyllove98/archive/2013/06/06/3122847.html

總結(jié)

以上是生活随笔為你收集整理的zoj 2526的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。