首页 > 其他 > 详细

P4779 【模板】单源最短路径(标准版)/ vv123的代码规范

时间:2020-02-21 03:21:13      阅读:46      评论:0      收藏:0      [点我收藏+]
 
 
 
优先队列优化dijkstra算法的流程:
1.初始化d[s]=0,其它无穷大
2.结构体Node存放点到s的距离和它的编号
3.q.push((Node){0,s});
4.取出队首u(当前离s最近的点),如果已访问过就跳过,否则标记为已访问,此时d[u]由估计值变为确定值
5.枚举和u相连的v,如果以u中转得到更短路径就更新d[v],并q.push((Node){d[v],v});
6.重复4,5两步直到队列为空
 
 
 
vv123的代码规范:
1.大括号不换行
2.两空格缩进
3.行内不打空格
4.尽量使用简短的变量名,如u,v,w,d;同类变量名写进一行;数组大小的个位为lg(size)
5.结构体、函数两两之间一个空行;同一函数内若代码过多适量空行
6.统一使用ios::sync_with_stdio(false)和cin/cout
 
 
技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,m,s,u,v,w,head[100005],d[100005],cnt;
 4 bool vis[100005];
 5 
 6 struct Edge{
 7     int v,w,next;
 8 }e[500005];
 9 
10 struct Node{
11     int w,pos;
12     bool operator < (const Node &x) const{
13       return x.w<w;
14     }
15 };
16 
17 void add(int u,int v,int w){
18     e[++cnt].v=v;
19     e[cnt].w=w;
20     e[cnt].next=head[u];
21     head[u]=cnt;
22 }
23 
24 void dijkstra(){
25     d[s]=0;
26     priority_queue<Node> q;
27     q.push((Node){0,s});
28     
29     while(!q.empty()){
30         Node t=q.top();q.pop();
31         int u=t.pos,w=t.w;
32         if(vis[u])continue;
33         vis[u]=true;
34         
35         for(int i=head[u];i;i=e[i].next){
36             int v=e[i].v;
37             if(d[v]>d[u]+e[i].w){
38                 d[v]=d[u]+e[i].w;
39                 if(!vis[v])q.push((Node){d[v],v});
40             }
41         }
42   }
43 }
44 
45 int main(){
46     ios::sync_with_stdio(false);
47     memset(d,127,sizeof(d));
48     cin>>n>>m>>s;
49     for(int i=1;i<=m;i++){
50         cin>>u>>v>>w;
51         add(u,v,w);
52     }
53     dijkstra();
54     for(int i=1;i<=n;i++)
55       cout<<d[i]<<" ";
56 } 
View Code

 

P4779 【模板】单源最短路径(标准版)/ vv123的代码规范

原文:https://www.cnblogs.com/vv123/p/12339792.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!