题目链接:https://www.luogu.org/problemnew/show/P1339
解题思路:
一道简单的最短路水题,dijkstra解法模板思路:https://www.cnblogs.com/lipeiyi520/p/10340361.html
AC代码:
#include<bits/stdc++.h>
using namespace std;
const int ff=0x3f3f3f;
int n,m,g[][],a,b,c;
bool vis[];
int dist[];
void dij(int s){
memset(vis,false,sizeof(vis));//初始时所有点都没有确定最短路
memset(dist,0x3f,sizeof(dist));//答案初始为无限大
dist[s]=;//原点最短路为0
for(int i=;i<n;i++){
int hh,mind=ff;
for(int j=;j<=n;++j){
if(!vis[j]&&dist[j]<mind){//找出于当前点相邻的距当前点最近的点
mind=dist[j];
hh=j;
}
}
vis[hh]=;
for(int j=;j<=n;++j){
dist[j]=min(dist[j],dist[hh]+g[hh][j]);//如果一个点a到原点距离加点a到当前点的距离小于当前点到原点距离,那么就更新
}
}
}
int main()
{
int ts,te;
memset(g,0x3f,sizeof(g)); //初始化图,是每个点到原点最短路都为无限大
cin>>n>>m>>te>>ts;
for(int i=;i<m;i++){//建图
cin>>a>>b>>c;
g[a][b]=c;
g[b][a]=c;
}
dij(ts);
cout<<dist[te];
return ;
}