• 洛谷单元最短路标准版——spfa优化


    #include<cstdio>

    #include<queue>

    #include<vector>

    #include<cstring>

    using namespace std;

    int n,m,k;

    int dis[100001];

    vector<int>a[100001],zhi[100001];

    bool fin[100001];

    struct pp

    {

             int dian;

    }dian;

    priority_queue <pp>q;

    bool operator <(pp a,pp b)

    {

             return dis[a.dian]>dis[b.dian];

    }

    void shengcheng()

    {

             for(int i=1;i<=n;i++)

             {

                       dis[i]=1000000009;

             }

             dis[k]=0;

             fin[k]=1;

             while(q.empty()==0)

             {

                       int u=q.top().dian;q.pop();

                       fin[u]=0;

                       for(int i=0;i<a[u].size();i++)

                       {

                                int w=a[u][i];

                                if(dis[w]>dis[u]+zhi[u][i])

                                {

                                         dis[w]=dis[u]+zhi[u][i];

                                         if(fin[w]==0)

                                         {

                                                   fin[w]=1;

                                                   dian.dian=w;

                                                   q.push(dian);

                                         }

                                }

                       }

             }

    }

    int x,y,z;

    int main()

    {

             scanf("%d%d%d",&n,&m,&k);

             for(int i=1;i<=m;i++)

             {

                      

                       scanf("%d%d%d",&x,&y,&z);

                       a[x].push_back(y);

                       zhi[x].push_back(z);

                      

             }

             dian.dian=k;

             q.push(dian);

             shengcheng();

             for(int i=1;i<=n;i++)

             {

                       if(i!=k)

                       printf("%d ",dis[i]);

                       else

                       printf("0 ");

             }

             return 0;

    }

    我不会迪杰斯特拉,于是想出了这个来偷懒

  • 相关阅读:
    etymology-R
    arp与免费arp的差别,arp老化
    基于S3C2440的linux-3.6.6移植——LED驱动【转】
    《unix环境高级编程》学习笔记【原创】
    安装截图工具 Shutter【转】
    《UNIX环境高级编程第三版》apue.h等源码文件的编译安装【转】
    Ubuntu 下安装Source Insight [转]
    "makefile:5: *** missing separator. Stop."【转】
    深入浅出剖析C语言函数指针与回调函数(一)【转】
    总结与反思、理想与规划---嵌入式学习之旅【原创】
  • 原文地址:https://www.cnblogs.com/fanhao050109/p/11455948.html
Copyright © 2020-2023  润新知