zoukankan      html  css  js  c++  java
  • 最短路径——SPFA算法(C++)

    源代码:
    
    #include<cstdio>
    #include<cstring>
    #include<queue>
    using namespace std;
    queue <int> h;
    int i[1001][1001],j[1001],n,k; //要想节省空间,会不会有更好的方法呢?
    bool f[1001]={0};
    int main()
    {
        memset(i,0x3f,sizeof(i));
        memset(j,0x3f,sizeof(j));
        scanf("%d%d",&n,&k);
        for (int a=1;a<=n;a++)
          for (int b=1;b<=n;b++)
          {
            int t;
            scanf("%d",&t);
            if (t!=-1)
              i[a][b]=t;
          } //矩阵输入。
        j[k]=0;
        f[k]=true;
        h.push(k);
        while (h.size())
        {
          int t=h.front();
          for (int a=1;a<=n;a++)
            if (i[t][a]+j[t]<j[a])
            {
              j[a]=i[t][a]+j[t];
              if (!f[a])
              {
                f[a]=true;
                h.push(a);
              }
            }
          h.pop();
    f[t]=false; }
    //利用队列除去冗余运算,从而进行显著的优化。 for (int a=1;a<=n;a++) printf("%d ",j[a]); return 0; }
  • 相关阅读:
    函数及其表示
    集合等离散数学内容
    求和
    分式·新方法
    弹力、重力、摩擦力
    洛谷 P1357 花园
    浮力
    因式分解·新方法
    压强
    洛谷 P2051 [AHOI2009]中国象棋
  • 原文地址:https://www.cnblogs.com/koruko/p/5182338.html
Copyright © 2011-2022 走看看