首页 > 其他分享 >PTA | 六度空间

PTA | 六度空间

时间:2024-10-30 21:48:02浏览次数:3  
标签:count 结点 六度 int PTA 空间 节点 isVisited

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论。这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人。”如图1所示。

图1 六度空间示意图
“六度空间”理论虽然得到广泛的认同,并且正在得到越来越多的应用。但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标。然而由于历史的原因,这样的研究具有太大的局限性和困难。随着当代人的联络主要依赖于电话、短信、微信以及因特网上即时通信等工具,能够体现社交网络关系的一手数据已经逐渐使得“六度空间”理论的验证成为可能。

假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。

输入格式

输入第1行给出两个正整数,分别表示社交网络图的结点数N(1<N≤10
3
,表示人数)、边数M(≤33×N,表示社交关系数)。随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个结点的编号(节点从1到N编号)。

输出格式

对每个结点输出与该结点距离不超过6的结点数占结点总数的百分比,精确到小数点后2位。每个结节点输出一行,格式为“结点编号:(空格)百分比%”。

输入样例

10 9
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10

输出样例

1: 70.00%
2: 80.00%
3: 90.00%
4: 100.00%
5: 100.00%
6: 100.00%
7: 100.00%
8: 90.00%
9: 80.00%
10: 70.00%

思路

这就是一个很典型的广度优先搜索题目。

isVisited用于记录已经访问过的节点。

struct node用于存放下一个可以前往的节点和到这里所需的步数。

最后的结果要包含节点自身(count=0时候的那个节点)在内。

Code

#include <bits/stdc++.h>
using namespace std;

bool a[1020][1020], isVisited[1020];

struct node {
    int data;
    int step;
};

void initIsVisited(int N) {
    for(int i = 1; i <= N; ++i) {
        isVisited[i] = false;
    }
}

int find(int b, int N) {
    queue<node> q;
    int count = 0;
    q.push({b, 0});
    isVisited[b] = true;
    while(!q.empty()) {
        node p = q.front();
        for(int i = 1; i <= N; ++i) {
            if(isVisited[i] == false && a[p.data][i] == true && p.step <= 5) {
                q.push({i, p.step+1});
                isVisited[i] = true;
                ++count;
            }
        }
        q.pop();
    }
    return count;
}

int main() {
    int N, M, A, B;
    double res[1020] = {0};
    cin >> N >> M;
    for(int i = 1; i <= M; ++i) {
        cin >> A >> B;
        a[A][B] = 1;
        a[B][A] = 1;
    }
    for(int i = 1; i <= N; ++i) {
        initIsVisited(N);
        int re = find(i, N);
        res[i] = 1.0*(re+1)/N;
    }
    for(int i = 1; i <= N; ++i) {
        printf("%d: %0.2f\%\n", i, res[i]*100);
    }
}

标签:count,结点,六度,int,PTA,空间,节点,isVisited
From: https://blog.csdn.net/qq_21739599/article/details/143375965

相关文章

  • GIS空间索引技术
    地理信息系统(GeographyInformationSystem,简称GIS)的主要任务之一是有效地检索空间数据及快速响应不同用户的在线查询。地理空间索引技术和方法是GIS的关键技术。是快速高效查询、检索和显示地理空间数据的重要指标。常用的空间索引技术介绍和比较: 网格空间索引、四叉树空间索......
  • 2024年模型构建、多维空间与几何学国际学术会议(ICMBMSG 2024)
    2024年模型构建、多维空间与几何学国际学术会议(ICMBMSG2024)2024InternationalConferenceonModelBuilding,MultidimensionalSpaceandGeometry(ICMBMSG2024)会议信息大会官网:2024年模型构建、多维空间与几何学国际学术会议(ICMBMSG2024)投稿邮箱:[email protected]【......
  • iOS 18 升级后如何在 IPhone 上获得更多存储空间
    无论您是对酷炫的iOS18新更新感到兴奋,还是只是下载新应用程序,存储空间不足都可能会让人感到烦恼。您可能在iPhone上看到过那些烦人的警报,例如“iOS18需要更多空间”或“存储空间不足”。在本文中,我们将展示四种超级有效的方法来解决如何在iPhone上获得更多存储空间。......
  • MySQL的临时表空间
    InnoDB使用会话临时表空间和全局临时表空间。会话临时表空间会话临时表空间用于存储用户创建的临时表,以及在InnoDB被配置为磁盘上内部临时表的存储引擎时由优化器创建的内部临时表。从MySQL8.0.16开始,磁盘上内部临时表使用的存储引擎是InnoDB。(以前,存储引擎由internal_tmp_d......
  • C#学习 [类型系统] 命名空间(12)
    作用1.组织类System.Console.WriteLine("HelloWorld!");System是一个命名空间,Console是该命名空间中的一个类。可使用using关键字,这样就不必使用完整的名称。usingSystem;Console.WriteLine("HelloWorld!");控制类和方法名称的范围namespaceSampleNamespace;......
  • 给 Azure EC2 增加磁盘空间
    一、调整EBS存储卷大小 二、 在操作系统内扩容对于Linux实例查看当前磁盘状态:使用 df-h 命令查看当前磁盘的使用情况。扩展分区:安装 cloud-utils-growpart 工具(如果尚未安装):sudoyuminstall-ycloud-utils-growpart 执行以下命令扩展分区(假设设备......
  • ArkTS 的内存空间详解:从 SemiSpace 到 HugeObjectSpace
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。引言ArkTS作为鸿蒙系统的开发语言,提......
  • Attention mechanism目前有什么缺点和改进空间
    Attentionmechanism是自然语言处理和计算机视觉领域的一项重要技术,但存在一些缺点和改进空间。主要缺点包括:1.计算复杂性高;2.缺乏解释性;3.可能产生不必要的注意力分配;其中,计算复杂性高可能限制了在大规模数据上的应用。改进方向包括:1.优化算法效率;2.增强模型解释性;3.精确控制注......
  • npm 包的命名空间介绍,以及@typescript-eslint/typescript-eslint
    npm包的命名空间是一个重要的概念,用于组织和管理相关的包。通过命名空间,开发者可以避免命名冲突、增强包的可读性和可维护性。以下是关于npm命名空间的详细介绍,并以@typescript-eslint作为示例。1.命名空间的结构命名空间的格式为@scope/package-name:@scope:这是......
  • 禁用Linux的地址空间随机化
    问题描述当我们学习OS的时候,往往需要接触到虚拟地址分配的相关知识。当接触到《OperatingSystems:ThreeEasyPieces》(OperatingSystems:ThreeEasyPieces)中的示例程序mem.c时(文末附上common.h)#include<unistd.h>#include<stdio.h>#include<stdlib.h>#include"c......