“六度空间”理论又称作“六度分隔(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%

代码长度限制

16 KB

时间限制

2500 ms

内存限制

64 MB

#include<stdio.h>
#include<malloc.h>
#define maxsize 1001//int Nedata[maxsize][maxsize];//定义图结构体(实际上可以省去,定义个全局变量的二维数组即可)
typedef struct node{int Nv;int Ne;int Nvdata[maxsize];int Nedata[maxsize][maxsize];
}*LGraph;//对图进行初始化
LGraph creatLGraph(int num)
{LGraph map = (LGraph)malloc(sizeof(struct node));map->Nv = num;for(int i=1;i<=map->Nv;i++){map->Nvdata[i] = i;}map->Ne = 0;return map;
}//定义队列结构体
typedef struct lode
{int f,r;int size;int* data;
}*queue;//对队列进行初始化
queue creatqueue()
{queue s = (queue)malloc(sizeof(struct lode));s->f = s->r = 0;s->data = (int*)malloc(sizeof(int)*maxsize);s->size = maxsize;return s;
}//队列判空
int isempty(queue s)
{return s->f==s->r;
}void insert(queue s,int n)
{s->data[s->r++] = n;
}int deletequeue(queue s)
{if(isempty(s)) return -1;else return s->data[s->f++];
}//定义全局变量数组,用于记录访问过的节点
int visited[maxsize] = {0};//广度优先遍历
double BFS(LGraph g,int k)
{queue s1 = creatqueue();double count = 1;           //六层内访问到的节点数int level = 0;              //当前节点所在的层数int last = k;               //当前层数访问的最后的一个节点int tail;                   //用于记录下一层节点最后进队列的元素insert(s1,k);visited[k] = 1;while(!isempty(s1)){int v = deletequeue(s1);for(int w=1;w<=g->Nv;w++){if(g->Nedata[v][w]==1&&!visited[w]){insert(s1,w);visited[w] = 1;count++;             //每入队一次,节点数加一tail = w;            //tail始终指向刚入队的节点}}if(v==last)                //如果出队的节点等于当前层数访问的最后的一个节点{                          //则更新层数,和last的值level++;last = tail;}if(level==6) break;}return count;
}int main()
{int N,M;scanf("%d %d",&N,&M);LGraph g1 = creatLGraph(N);for(int i=0;i<M;i++){int num1,num2;scanf("%d %d",&num1,&num2);g1->Nedata[num1][num2] = 1;   //无向图g1->Nedata[num2][num1] = 1;}for(int i=1;i<=g1->Nv;i++){double num = 0;num = BFS(g1,i);//printf("num: %lf\n",num);printf("%d: %.2lf%%\n",i,(num/g1->Nv)*100.0);for(int j=1;j<=g1->Nv;j++){visited[j] = 0;     //每遍历完一个节点都要对用于记录被访问的节点的值进行一次初始化}}}

最后附上陈姥姥的一张图方便理解:

(新手发文,仅代表个人理解,代码存在不足)

实例6.1 六度空间分数 30 DS课程组 单位 浙江大学相关推荐

  1. 11-散列1 电话聊天狂人分数 25作者 DS课程组单位 浙江大学

    给定大量手机用户通话记录,找出其中通话次数最多的聊天狂人. 输入格式: 输入首先给出正整数N(≤105),为通话记录条数.随后N行,每行给出一条通话记录.简单起见,这里只列出拨出方和接收方的11位数字 ...

  2. 【PTA】数据结构与算法->6-13 LinkList10-带头结点的单链表逆置【有题解视频,可本地编译器调试】作者 通信DS课程组单位 成都信息工程大学

    题目要求:设计算法Reverse( ),将带头结点的单链表A逆置,要求利用原有链表的链点,最后输出原单链表和逆置后的单链表. 带头结点的单链表结点定义如下: typedef int DataType; ...

  3. R7-2 sdut-九九乘法表分数 30作者 周雪芹单位 山东理工大学九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题。《九九乘法歌诀》,又常称为“小九九”,如下图所示。你的任务是

    R7-2 sdut-九九乘法表 分数 30 全屏浏览题目 切换布局 作者 周雪芹 单位 山东理工大学 九九乘法表是数学学习的基础,今天我们就来看看乘法表的相关问题.<九九乘法歌诀>,又常称 ...

  4. L2-007 家庭房产分数 25作者 陈越单位 浙江大学

    给定每个人的家庭成员和其自己名下的房产,请你统计出每个家庭的人口数.人均房产面积及房产套数. 输入格式: 输入第一行给出一个正整数N(≤1000),随后N行,每行按下列格式给出一个人的房产: 编号 父 ...

  5. 7-101 个位数统计分数 15作者 陈越单位 浙江大学

    给定一个 k 位整数 N=dk−1​10k−1+⋯+d1​101+d0​ (0≤di​≤9, i=0,⋯,k−1, dk−1​>0),请编写程序统计每种不同的个位数字出现的次数.例如:给定 N= ...

  6. 7-73 一帮一分数 15作者 陈越单位 浙江大学

    "一帮一学习小组"是中小学中常见的学习组织方式,老师把学习成绩靠前的学生跟学习成绩靠后的学生排在一组.本题就请你编写程序帮助老师自动完成这个分配工作,即在得到全班学生的排名后,在当 ...

  7. 整除光棍 分数 20作者 翁恺单位 浙江大学

    这里所谓的"光棍",并不是指单身汪啦~ 说的是全部由1组成的数字,比如1.11.111.1111等.传说任何一个光棍都能被一个不以5结尾的奇数整除.比如,111111就可以被13整 ...

  8. PTA 6-6 分数 分数 10 作者 翁恺 单位 浙江大学

    题目: 裁判测试程序样例: #include <iostream> using namespace std;/* 请在这里填写答案 */int main(void) {Fraction f ...

  9. 7-2 六度空间(30 分)

    7-2 六度空间(30 分) "六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:" ...

最新文章

  1. SAP 物料主数据里的Commodity Code
  2. vmware虚拟机克隆后,启动网卡报错device eth0 does not seem to be present, delaying initialization...
  3. php接收get数组数据,来自HTTP的PHP注入GET数据用作PHP数组键值
  4. Windows的特色
  5. oracle 把逗号分隔符,oracle 分逗号分隔字符串函数
  6. javascript 函数定义的方式
  7. 创业经验点滴 五(转) 关于淘宝
  8. Windows 2012 R2 操作系统搭建DHCP-HA集群
  9. uniapp公共跳转(uni.navigateTo)封装
  10. Unity Shader 假光源效果
  11. Jvm与DVM与ART
  12. 技术人员硬实力和软实力
  13. Introduction to the Peer-to-Peer Sockets Project
  14. 改进YOLOv5系列:10.最新HorNet结合YOLO应用首发! | 多种搭配,即插即用 | Backbone主干、递归门控卷积的高效高阶空间交互高效
  15. java线程状态管理
  16. 打通MySQL架构和业务的任督二脉
  17. Unity Input 通过蓝牙手柄控制游戏
  18. 十二、案例:加利福尼亚房屋价值数据集(多元线性回归) Lasso 岭回归 分箱处理非线性问题 多项式回归
  19. 用python实现图片换脸
  20. 【一文搞懂】linux无界面模式安装chrome和chromedriver

热门文章

  1. top命令怎么看?top命令详解
  2. 使用URL Rewrite实现网站伪静态
  3. 分布式高并发服务三种常用限流方案简介
  4. java类加载机制、类加载器、自定义类加载器
  5. 2021蓝桥杯省赛b题解
  6. Matlab 动态输入变量和嵌套函数、匿名函数
  7. 学海灯塔新增学习笔记上传功能
  8. linux 应用层gpio中断_linux下GPIO中断驱动US100传感器--Apple的学习笔记
  9. 王菲语法11 动词(非谓语动词)
  10. 阻抗匹配四种处理方式