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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【模板】单源最短路径(弱化版)

發(fā)布時(shí)間:2025/4/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【模板】单源最短路径(弱化版) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目背景

本題測試數(shù)據(jù)為隨機(jī)數(shù)據(jù),在考試中可能會(huì)出現(xiàn)構(gòu)造數(shù)據(jù)讓SPFA不通過,如有需要請移步?P4779。

題目描述

如題,給出一個(gè)有向圖,請輸出從某一點(diǎn)出發(fā)到所有點(diǎn)的最短路徑長度。

輸入格式

第一行包含三個(gè)整數(shù)N、M、S,分別表示點(diǎn)的個(gè)數(shù)、有向邊的個(gè)數(shù)、出發(fā)點(diǎn)的編號。

接下來M行每行包含三個(gè)整數(shù)Fi、Gi、Wi,分別表示第i條有向邊的出發(fā)點(diǎn)、目標(biāo)點(diǎn)和長度。

輸出格式

一行,包含N個(gè)用空格分隔的整數(shù),其中第i個(gè)整數(shù)表示從點(diǎn)S出發(fā)到點(diǎn)i的最短路徑長度(若S=i則最短路徑長度為0,若從點(diǎn)S無法到達(dá)點(diǎn)i,則最短路徑長度為2147483647)

輸入輸出樣例

輸入 #1復(fù)制 4 6 1 1 2 2 2 3 2 2 4 1 1 3 5 3 4 3 1 4 4 輸出 #1復(fù)制 0 2 4 3

說明/提示

時(shí)空限制:1000ms,128M

數(shù)據(jù)規(guī)模:

對于20%的數(shù)據(jù):N<=5,M<=15;

對于40%的數(shù)據(jù):N<=100,M<=10000;

對于70%的數(shù)據(jù):N<=1000,M<=100000;

對于100%的數(shù)據(jù):N<=10000,M<=500000。保證數(shù)據(jù)隨機(jī)。

對于真正 100% 的數(shù)據(jù),請移步?P4779。請注意,該題與本題數(shù)據(jù)范圍略有不同。

樣例說明:

圖片1到3和1到4的文字位置調(diào)換

?

本題根據(jù)數(shù)據(jù)邊數(shù)m<=500000,鄰接矩陣存不下,只能使用靜態(tài)鄰接表存儲(chǔ)。

?

#include<cstdio> #include<queue> using namespace std;const long long inf=2147483647; const int maxn=10005; const int maxm=500005; using namespace std; int n,m,s,num_edge=0; int dis[maxn],vis[maxn],head[maxm]; struct Edge{int next,to,dis; }edge[maxm];void add(int from,int to,int dis){ edge[++num_edge].next=head[from]; edge[num_edge].to=to;edge[num_edge].dis=dis;head[from]=num_edge; }void spfa(){queue<int> q;for(int i=1; i<=n; i++) {dis[i]=inf;vis[i]=0;}q.push(s); dis[s]=0; vis[s]=1;while(!q.empty()){int u=q.front();q.pop(); vis[u]=0;for(int i=head[u];i;i=edge[i].next){int v=edge[i].to; if(dis[v]>dis[u]+edge[i].dis){dis[v]=dis[u]+edge[i].dis;if(vis[v]==0){vis[v]=1;q.push(v);}}}} }int main(){scanf("%d%d%d",&n,&m,&s);for(int i=1; i<=m; i++){int f,g,w;scanf("%d%d%d",&f,&g,&w); add(f,g,w);}spfa();for(int i=1;i<=n;i++){ if(s==i){printf("0 ");}else{printf("%d ",dis[i]);}}return 0; }

?

轉(zhuǎn)載于:https://www.cnblogs.com/hrj1/p/11160489.html

總結(jié)

以上是生活随笔為你收集整理的【模板】单源最短路径(弱化版)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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