floyed dij spfa 模板

 1 /*
 2    SPFA模板 
 3 */
 4 const int inf=0x3f3f3f3f;
 5 inline int SPFA(int s){
 6     memset(dis,inf,sizeof(dis));
 7     queue<int > q;
 8     dis[s]=0;
 9     q.push(s);
10     vis[s]=1;
11     while(!q.empty()){
12         int u=q.front;
13         q.pop();
14         vis[u]=0;
15         for(int i=head[u];i;i=edge[i].next ){
16             int v=edge[i].to ;
17             if(dis[v]>dis[u]+edge[i].value ){
18                 dis[v]=dis[u]+edge[i].value ;
19                 if(!vis[v]){
20                     vis[v]=1;
21                     q.push(v);
22                 }
23                 cntt[v]++;
24                 if(cntt[v]>=n) return 0;
25             }
26         }
27     }
28     return 1;
29 } 
/*
    dijstra模板 (堆优化)
*/
const int inf=0x3f3f3f3f;
typedef pair<int ,int > p
inline void dijstra(int s){
    memset(dis,inf,sizeof(dis))
    priority_queue<p,vector<p>,greater<p> > q;
    dis[s]=0;
    q.push(make_pair(0,s));//pair类型默认先比较第一项
    while(!q.empty()){
        int u=q.top().second;
        int w=q.top().first;
        q.pop();
        if(dis[u]!=w) continue;
        for(int i=head[u];i;i=edge[i].next ){
            int v=edge[i].to ;
            if(dis[v]>dis[u]+edge[i].value ){
                dis[v]=dis[u]+edge[i].value ;
                q.push(make_pair(dis[v],v));
            }
        }
    }
} 
 1 /*
 2     floyd模板 
 3 */
 4 inline void floyd(){
 5     for(int k=1;k<=n;k++)
 6      for(int i=1;i<=n;i++)
 7       for(int j=1;j<=n;j++){
 8           dis[i][j]=min(dis[i][k]+dis[k][j],dis[i][j]); 
 9         //或者:
10         if(dis[i][j]>dis[i][k]+dis[k][j])
11           dis[i][j]=dis[i][k]+dis[k][j]; 
12       }
13 }

猜你喜欢

转载自www.cnblogs.com/nvwang123/p/10776670.html