zoukankan      html  css  js  c++  java
  • 最短路上的统计(Floyd)

    Description

      一个无向图上,没有自环,所有边的权值均为1,对于一个点对(a,b),我们要把所有a与b之间所有最短路上的点的总个数输出。

    Input

    第一行n,m,表示n个点,m条边
    接下来m行,每行两个数a,b,表示a,b之间有条边
    在下来一个数p,表示问题的个数
    接下来p行,每行两个数a,b,表示询问a,b

    Output

    对于每个询问,输出一个数c,表示a,b之间最短路上点的总个数

    Sample Input

    5 6
    1 2
    1 3
    2 3
    2 4
    3 5
    4 5
    3
    2 5
    5 1
    2 4

    Sample Output

    4
    3
    2

    Hint

    范围:n<=100,p<=5000
    .
    .
    .
    .
    .

    分析

    应该预处理a数组,将权值设为无穷大
    然后读入题目中的p组问题
    用循环类似于floyd那样过一次就好了(能匹配上的+1)
    .
    .
    .
    .
    .

    程序:
    #include <iostream> 
    using namespace std;
    int a[101][101],n,p,ans,m;
    int main()
    {
        cin>>n>>m;
        for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++) 
        a[i][j]=100000;
        int x,y;
        for (int i=1;i<=m;i++)
        {
            cin>>x>>y;
            a[x][y]=1;
            a[y][x]=1;
        }
        for (int k=1;k<=n;k++)
        for (int i=1;i<=n;i++)
        for (int j=1;j<=n;j++)
        if (a[i][k]+a[k][j]<a[i][j])
        a[i][j]=a[i][k]+a[k][j];
        cin>>p;
        for (int i=1;i<=p;i++)
         {
            ans=2;
            cin>>x>>y;
            for (int l=1;l<=n;l++) 
            if (a[x][l]+a[l][y]==a[x][y]&&x!=l&&l!=y) ans++;
            cout<<ans<<endl;
         }
        return 0;
    }
    
  • 相关阅读:
    Web Service 其他服务器检测不到查询测试按钮
    设计模式的原则
    适配器模式
    css局部概念的理解:
    编辑并列DIV
    数据可视化 seaborn绘图(1)
    机器学习笔记(3) 随机森林
    机器学习笔记(2) 集成学习 随机森林先导知识
    机器学习笔记(1)决策树
    【转】各种开源协议及其关系
  • 原文地址:https://www.cnblogs.com/YYC-0304/p/9499957.html
Copyright © 2011-2022 走看看