生活随笔
收集整理的這篇文章主要介紹了
【弱化版】【P3371 【模板】单源最短路径(弱化版)】-C++
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
→原題傳送門←
看到題目描述我就知道,這道題不能用SPFA[手動(dòng)補(bǔ)滑稽]
那么我這道題目采用的是dijkstra算法不了解的去補(bǔ)一下知識(shí)哈.
dij的模板:
#include<bits/stdc++.h>
using namespace std;
int dst[5010];
int n,m;
bool s[5010];
int pre[5010];
struct node
{int v,w;node(){}node(int vv,int ww){v=vv,w=ww;}
};
vector<node> g[5010];
void init()
{for(int i=1;i<=5000;i++){dst[i]=0x7f7f7f7f;}
}
int main()
{init();int a,b,c;cin>>n>>m;for(int i=1;i<=m;i++){cin>>a>>b>>c;g[a].push_back(node(b,c));g[b].push_back(node(a,c));}s[1]=1;dst[1]=0;int lasti=1;for(int k=1;k<n;k++){for(int j=0;j<g[lasti].size();j++){int v=g[lasti][j].v,w=g[lasti][j].w;if(!s[v]&&w+dst[lasti]<dst[v]){pre[v]=lasti;dst[v]=w+dst[lasti];}}int min_i=0x7f7f7f7f,min_dst=0x7f7f7f7f;for(int i=1;i<=n;i++){if(!s[i]){if(dst[i]<min_dst){min_dst=dst[i];min_i=i;}}}lasti=min_i;s[min_i]=1;//printf("更新點(diǎn)%d加入,父節(jié)點(diǎn)%d\n",lasti,pre[lasti]);}cout<<dst[n]<<endl;return 0;
}
用dijkstra的模板其實(shí)得到的dst[i]就是從1出發(fā)的最短路,需要修改的地方在于:
第35,36,37的1全部改成給出的start,然后輸出優(yōu)化一下。
可以先去嘗試一下修改模板AC這道題,下面會(huì)是完整代碼,建議不要直接看哈
.
.
.
.
.
.
…
.
.
.
…
.
.
.
.
#include<bits/stdc++.h>
using namespace std;
int dst[100010];
int n,m;
bool s[100010];
int pre[100010];
struct node
{int v,w;node(){}node(int vv,int ww){v=vv,w=ww;}
};
vector<node> g[500010];
void init()
{for(int i=1;i<=100000;i++){dst[i]=2147483647;}
}
int main()
{init();int a,b,c,st;cin>>n>>m>>st;for(int i=1;i<=m;i++){cin>>a>>b>>c;g[a].push_back(node(b,c));}s[st]=1;dst[st]=0;int lasti=st;for(int k=1;k<n;k++){for(int j=0;j<g[lasti].size();j++){int v=g[lasti][j].v,w=g[lasti][j].w;if(!s[v]&&w+dst[lasti]<dst[v]){pre[v]=lasti;dst[v]=w+dst[lasti];}}int min_i=2147483647,min_dst=2147483647;for(int i=1;i<=n;i++){if(!s[i]){if(dst[i]<min_dst){min_dst=dst[i];min_i=i;}}}if(min_i<=100009){lasti=min_i;s[min_i]=1;}//printf("更新點(diǎn)%d加入,父節(jié)點(diǎn)%d\n",lasti,pre[lasti]);}cout<<dst[1];if(n>1)for(int i=2;i<=n;i++){cout<<" "<<dst[i];}return 0;
}
ov.
轉(zhuǎn)載于:https://www.cnblogs.com/moyujiang/p/11167748.html
總結(jié)
以上是生活随笔為你收集整理的【弱化版】【P3371 【模板】单源最短路径(弱化版)】-C++的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。