zoukankan      html  css  js  c++  java
  • SPFA,dijskra,prime,topu四种算法的模板

      1 ////#include<stdio.h>
      2 ////#include<string.h>
      3 ////#include<queue>
      4 ////#include<algorithm>
      5 ////using namespace std;
      6 ////const int INF=0x3f3f3f3f;
      7 ////const int MAXN=110;
      8 ////const int MAXM=20010;
      9 ////int top,vis[MAXN],dis[MAXN],head[MAXM];
     10 ////int N,M;
     11 ////queue<int>dl;
     12 ////struct Edge{
     13 ////    int from,to,value,next;
     14 ////    };
     15 ////    Edge edg[MAXM];
     16 ////void initial(){
     17 ////    top=0;
     18 ////    memset(vis,0,sizeof(vis));
     19 ////    memset(dis,INF,sizeof(dis));
     20 ////    memset(head,-1,sizeof(head));
     21 ////    while(!dl.empty())dl.pop();
     22 ////}
     23 ////void add(int u,int v,int value){
     24 ////        Edge E={u,v,value,head[u]};
     25 ////        edg[top]=E;
     26 ////        head[u]=top++;
     27 ////}
     28 ////void SPFA(int sx){
     29 ////    dl.push(sx);
     30 ////    dis[sx]=0;
     31 ////    vis[sx]=1;
     32 ////    while(!dl.empty()){
     33 ////        int u=dl.front();
     34 ////        dl.pop();
     35 ////        vis[u]=0;
     36 ////        for(int i=head[u];i!=-1;i=edg[i].next){
     37 ////                int v=edg[i].to;
     38 ////            if(dis[u]+edg[i].value<dis[v]){
     39 ////                dis[v]=dis[u]+edg[i].value;
     40 ////                if(!vis[v]){
     41 ////                    vis[v]=1;
     42 ////                    dl.push(v);
     43 ////                }
     44 ////            }
     45 ////        }
     46 ////    }
     47 ////    printf("%d
    ",dis[N]);
     48 ////}
     49 ////int main(){
     50 ////    int a,b,c;
     51 ////    while(~scanf("%d%d",&N,&M),N|M){
     52 ////            initial();
     53 ////        while(M--){
     54 ////            scanf("%d%d%d",&a,&b,&c);
     55 ////            add(a,b,c);
     56 ////            add(b,a,c);
     57 ////        }
     58 ////    SPFA(1);
     59 ////    }
     60 ////    return  0;
     61 ////}
     62 ///**********************************************/
     63 //#include<stdio.h>
     64 //#include<string.h>
     65 //const int MAXN=110;
     66 //const int INF=0x3f3f3f3f;
     67 //int map[MAXN][MAXN],vis[MAXN],dis[MAXN];
     68 //int N,M;
     69 //void initial(){
     70 //    memset(map,INF,sizeof(map));
     71 //    memset(vis,0,sizeof(vis));
     72 //    memset(dis,INF,sizeof(dis));
     73 //}
     74 //void dijskra(int sx){
     75 //    dis[sx]=0;
     76 //    while(true){
     77 //        int k=-1;
     78 //        for(int i=1;i<=N;i++)
     79 //            if(!vis[i]&&(k==-1||dis[i]<dis[k]))k=i;
     80 //            if(k==-1)break;
     81 //            vis[k]=1;
     82 //            for(int i=1;i<=N;i++)
     83 //                if(!vis[i]&&dis[k]+map[k][i]<dis[i])
     84 //                dis[i]=dis[k]+map[k][i];
     85 //    }
     86 //    printf("%d
    ",dis[N]);
     87 //}
     88 //void add(){
     89 //    int a,b,c;
     90 //    while(M--){
     91 //    scanf("%d%d%d",&a,&b,&c);
     92 //    map[a][b]=map[b][a]=c;
     93 //    }
     94 //}
     95 //int main(){
     96 //    while(~scanf("%d%d",&N,&M),N|M){
     97 //        initial();
     98 //        add();
     99 //        dijskra(1);
    100 //    }
    101 //    return 0;
    102 //}
    103 ///**********************************************/
    104 //#include<stdio.h>
    105 //#include<string.h>
    106 //const int MAXN=10010;
    107 //const int INF=0x3f3f3f3f;
    108 //int N,M,ans,flot;
    109 //int vis[MAXN],dis[MAXN],map[MAXN][MAXN];
    110 //void initial(){
    111 //    memset(vis,0,sizeof(vis));
    112 //    memset(dis,0x3f,sizeof(dis));
    113 //    memset(map,0x3f,sizeof(map));
    114 //    ans=0;
    115 //    flot=1;
    116 //}
    117 //void prime(){
    118 //    vis[1]=1;
    119 //    for(int i=1;i<=N;i++)dis[i]=map[1][i];
    120 //    while(true){
    121 //            int temp=INF,k;
    122 //        for(int i=1;i<=N;i++)
    123 //        if(!vis[i]&&dis[i]<temp)temp=dis[k=i];
    124 //    if(temp==INF)break;
    125 //    vis[k]=1;
    126 //    flot++;
    127 //    ans+=temp;
    128 //    for(int i=1;i<=N;i++)
    129 //        if(!vis[i]&&map[k][i]<dis[i])dis[i]=map[k][i];
    130 //    }
    131 //    printf("%d %d
    ",ans,flot);
    132 //}
    133 //void add(){
    134 //    while(M--){int a,b,c;
    135 //        scanf("%d%d%d",&a,&b,&c);
    136 //        map[a][b]=map[b][a]=c;
    137 //    }
    138 //}
    139 //int main(){
    140 //    while(~scanf("%d%d",&N,&M),N|M){
    141 //            initial();
    142 //            add();
    143 //            prime();
    144 //    }
    145 //    return 0;
    146 //}
    147 /*********************************************/
    148 #include<stdio.h>
    149 #include<string.h>
    150 #include<queue>
    151 using namespace std;
    152 const int MAXN=1010;
    153 const int MAXM=100010;
    154 int head[MAXM];
    155 struct Edge{
    156     int frome,to,next;
    157 };
    158 Edge edg[MAXM];
    159 int N,M;
    160 int que[MAXN],ans[MAXN],top,edgnum;
    161 priority_queue<int,vector<int>,greater<int> >dl;
    162 
    163 void initial(){
    164     memset(head,-1,sizeof(head));
    165     while(!dl.empty())dl.pop();
    166     memset(que,0,sizeof(que));
    167     top=0;edgnum=0;
    168 }
    169 void topu(){
    170     for(int i=1;i<=N;i++)
    171         if(!que[i])dl.push(i);
    172     while(!dl.empty()){
    173         int k=dl.top();
    174         dl.pop();
    175         ans[top++]=k;
    176         for(int i=head[k];i!=-1;i=edg[i].next){
    177             que[edg[i].to]--;
    178         if(que[edg[i].to]==0)dl.push(edg[i].to);
    179         }
    180     }
    181     for(int i=0;i<top;i++)printf("%d ",ans[i]);puts("");
    182 }
    183 void add(int a,int b){
    184     Edge E={a,b,head[a]};
    185     edg[edgnum]=E;
    186     head[a]=edgnum++;
    187 }
    188 void get(){
    189     int a,b;
    190     while(M--){
    191         scanf("%d%d",&a,&b);
    192         que[b]++;
    193         add(a,b);
    194     }
    195 }
    196 int main(){
    197     while(~scanf("%d%d",&N,&M),N|M){
    198         initial();
    199         get();
    200         topu();
    201     }
    202     return 0;
    203 }
  • 相关阅读:
    HTML学习笔记Day16
    HTML学习笔记Day15
    HTML学习笔记Day14
    三角形
    三级菜单
    开关制作源代码
    HTML标签
    弹性盒模型
    怪异盒模型
    实验7:Problem F: STL——字典
  • 原文地址:https://www.cnblogs.com/handsomecui/p/4741735.html
Copyright © 2011-2022 走看看