zoukankan      html  css  js  c++  java
  • 一本通之最短路径

    一个从输入就开始恶心人的题目~~~~~~~~~~~~

    显然我们要判断邻接矩阵中的数字并把它赋值给g[i][j]。

    介绍个神奇的东西

    if是个神奇的函数。当用scanf输入时,有格式占位符。把这两个东西神奇的组合一下,可以判断当前输入的字符是否是整数。

    代码如下:

    #include<iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    int main()
    {int k; 
     if(scanf("%d",&k))cout<<"true"<<endl;
      else cout<<"false"<<endl;
    }

    输入3,输出true

    输入 38,输出true

    输入k,输出false

    这个与快读的判断相比,如果数据是两位数,就不用再计算了。

    解决输入,接下来就是求最短路径

    因为要求1到每个点的最短路径,所以用floyed比较方便

    代码如下

    #include<iostream>
    #include<cstdio>
    #include<queue>
    using namespace std;
    int g[101][101],n,m;
    const int inf=0x7ffffff;
    int main()
    {scanf("%d%d",&n,&m);
      for(int i=1;i<=n;i++)
       {for(int j=1;j<=n;j++)
         g[i][j]=inf;
         g[i][i]=0;
       }
    for(int i=1;i<=n;i++)
        {
            for(int j=1;j<=n;j++)
            {
                int b;
                if(scanf("%d",&b)==1)//如果b是整数
                    a[i][j]=b;
                else
                    a[i][j]=INF;
            }
        }
      for(int k=1;k<=n;k++)
      {for(int i=1;i<=n;i++)
        {for(int j=1;j<=n;j++)
          {if(g[i][j]>g[i][k]+g[k][j])
            g[i][j]=g[i][k]+g[k][j];
          }
        }
      }
      for(int i=1;i<=n;i++)
      {if(i!=m)
        printf("%d->%d = %d
    ",m,i,g[m][i]);
      }
    }
  • 相关阅读:
    fatal: protocol error: bad line length character: This
    httpd: apr_sockaddr_info_get() failed for bogon
    Go语言函数
    Go语言流程控制
    进制转换
    Go语言运算符
    LeetCode 62. Unique Paths
    LeetCode 61. Rotate List
    asdfasdfasdf
    开发者,别让自己孤独
  • 原文地址:https://www.cnblogs.com/lcez56jsy/p/10744565.html
Copyright © 2011-2022 走看看