题目链接:【模板】单源最短路径(弱化版) - 洛谷
- #include
- using namespace std;
- #define INF 2147483647
- int n,m,s,a,b,c;
- const int N=100010;
- struct edge{int v,w;};//终点和边权
- vector
e[N]; - int d[N],vis[N];
-
- void dijkstra(int s){
- for(int i=0;i<=n;i++){
- d[i]=INF;//初始化所有点到原点距离为无穷大
- }
- d[s]=0;//到自身距离为0
- for(int i=1;i
//枚举次数n-1次 - int u=0;
- for(int j=1;j<=n;j++){//枚举n个点
- if(!vis[j]&&d[j]
//找到距离最短的点 - }
- vis[u]=1;//标记当前距离最短的点出圈
- for(auto ed:e[u]){//枚举当前点的所有邻边
- int v=ed.v,w=ed.w;
- if(d[v]>d[u]+w){//三角形松弛操作
- d[v]=d[u]+w;
- }
- }
- }
- }
- int main(){
- cin>>n>>m>>s;
- for(int i=0;i
- cin>>a>>b>>c;
- e[a].push_back({b,c});//a到b边权为c
- }
- dijkstra(s);
- for(int i=1;i<=n;i++){
- printf("%d ",d[i]);
- }
- return 0;
- }
- #include
- using namespace std;
- const int N=100010;
- int n,m,s,a,b,c;
- struct edge{int v,w;};
- vector
e[N]; - int d[N],vis[N];
- void dijkstra(int s){
- memset(d,0x3f,sizeof d);d[s]=0;
- priority_queue
int,int>>q; - q.push({0,s});
- while(q.size()){
- auto t=q.top();q.pop();
- int u=t.second;
- if(vis[u])continue;//已经出队的就跳过
- vis[u]=1;//出队标记
- for(auto ed:e[u]){
- int v=ed.v,w=ed.w;
- if(d[v]>d[u]+w){
- d[v]=d[u]+w;
- q.push({-d[v],v});//加上负号大根堆等价于小根堆
- }
- }
- }
- }
- int main(){
- cin>>n>>m>>s;
- for(int i=0;i
- cin>>a>>b>>c,e[a].push_back({b,c});
- }
- dijkstra(s);
- for(int i=1;i<=n;i++)printf("%d ",d[i]);
- return 0;
- }
-
相关阅读:
Hadoop简明教程
MASTER aborted replication with an error: NOAUTH Authentication required.
PHP+AJAX实现异步上传文件
MySQL 定义条件与处理程序 的详细讲解
单链表排序
数据结构 堆——详细动画图解,形象理解
Servlet的基础详解与架构解析
React--props细节知识
LeetCode 496. Next Greater Element I
爱心熊 Game Jam 来啦,30,000 SAND等你们来赢取!
-
原文地址:https://blog.csdn.net/lmessi10_/article/details/136243195