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

图6.4 六度空间示意图

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

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

输入格式说明:

输入第1行给出两个正整数,分别表示社交网络图的结点数N (1

输出格式说明:

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

样例输入与输出:

序号

输入

输出

1

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%

2

10 8

1 2

2 3

3 4

4 5

5 6

6 7

7 8

9 10

1:70.00%

2:80.00%

3:80.00%

4:80.00%

5:80.00%

6:80.00%

7:80.00%

8:70.00%

9:20.00%

10:20.00%

3

11 10

1 2

1 3

1 4

4 5

6 5

6 7

6 8

8 9

8 10

10 11

1:100.00%

2:90.91%

3:90.91%

4:100.00%

5:100.00%

6:100.00%

7:100.00%

8:100.00%

9:100.00%

10:100.00%

11:81.82%

4

2 1

1 2

1:100.00%

2:100.00%

算法思路:

1、对每个节点进行广度优先搜索

2、搜索过程中累计访问的节点数

3、需要记录层次,仅计算6层以内的节点数

分析:

1、伪码描述

针对单个节点的BFS

int BFS ( Vertex V )

{

visited[V] = true; count = ;

level = ; last = V;

Enqueue(V, Q);

while(!IsEmpty(Q)){

V = Dequeue(Q);

for( V 的每个邻接点 W )

if( !visited[W] ) {

visited[W] = true;

Enqueue(W, Q); count++;

tail = W;

}

if( V == last ) {

level++; last = tail;

}

if( level == ) break;

}

Reset(V) // 重置V的每个邻接点访问状态

returncount;

}

对所有节点实现一次

void SDS() {

for V in G {

count = BFS(V)

print(count)

}

}

2、实现代码

#pragma mark - 六度空间

#include

#include

#include

typedef struct {

int index;

bool visited;

void *next;

} SDSVertex;

int a[][];

SDSVertex v_sds[];

int pNum = , edgeNum = ;

typedef struct queue {

SDSVertex *front;

SDSVertex *rear;

} Queue;

Queue *createQueue()

Queue *queue = (Queue *)malloc(sizeof(Queue));

queue->front = NULL;

queue->rear = NULL;

return queue;

}

void addToQueue(Queue *queue, SDSVertex *node)

{

if (!(queue->rear)) {

queue->rear = node;

} else {

queue->rear->next = node;

queue->rear = node;

}

if (!(queue->front)) {

queue->front = node;

}

}

SDSVertex *deleteFromQueue(Queue *queue)

{

SDSVertex *temp = queue->front;

if (temp) {

queue->front = queue->front->next;

return temp;

} else {

return NULL;

}

}

int isEmptyQueue(Queue *queue)

{

if (queue->front == NULL) {

return ;

} else {

return ;

}

}

int BFS_SDS(int i)

{

SDSVertex *v = &v_sds[i];

v->visited = true;

int level = , count = ;

SDSVertex *last = v, *tail = NULL;

Queue *queue = createQueue();

addToQueue(queue, v);

while (!isEmptyQueue(queue)) {

SDSVertex *vertex = deleteFromQueue(queue);

for (int j = ; j <= pNum; j++) {

int hasEdge = a[vertex->index][j];

if (hasEdge && !v_sds[j].visited) {

v_sds[j].visited = true;

addToQueue(queue, &v_sds[j]); count++;

tail = &v_sds[j];

}

}

if (vertex == last) {

level++; last = tail;

}

if (level == ) {

break;

}

}

for (int i = ; i <= pNum; i++) {

v_sds[i].visited = false;

v_sds[i].next = NULL;

}

return count;

}

int main()

{

scanf("%d %d", &pNum, &edgeNum);

for (int i = ; i <= edgeNum; i++) {

int from = , to = ;

scanf("%d %d", &from, &to);

a[from][to] = ;

a[to][from] = ;

}

for (int i = ; i <= pNum; i++) {

v_sds[i].visited = false;

v_sds[i].index = i;

v_sds[i].next = NULL;

}

int count = -;

for (int i = ; i <= pNum; i++) {

count = BFS_SDS(i);

printf("%d: %.2f%%\n", i, count * 100.0 / pNum);

}

}

3、运行结果:

PTA 06-图3 六度空间 &lpar;30分&rpar;

"六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:"你和任何一个陌生人之间所间隔 ...

PTA 7-7 六度空间&lpar;广搜&rpar;

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

六度空间(MOOC)

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

PAT007 六度空间

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

【PTA 天梯赛训练】六度空间(广搜)

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

pat05-图3&period; 六度空间 &lpar;30&rpar;

05-图3. 六度空间 (30) 时间限制 1500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard “六度空间”理论又称作“六度分隔(Six Degrees ...

&lbrack;Network Analysis&rsqb; 复杂网络分析总结

在我们的现实生活中,许多复杂系统都可以建模成一种复杂网络进行分析,比如常见的电力网络.航空网络.交通网络.计算机网络以及社交网络等等.复杂网络不仅是一种数据的表现形式,它同样也是一种科学研究的手段.复 ...

python 爬虫(三)

爬遍整个域名    六度空间理论:任何两个陌生人之间所间隔的人不会超过六个,也就是说最多通过五个人你可以认识任何一个陌生人.通过维基百科我们能够通过连接从一个人连接到任何一个他想连接到的人. 1. 获 ...

图 Graph-图的表示及其遍历

2018-03-05 16:19:46 图是计算机科学中的一个非常重要的概念,图是一种多对多的关系.从某种角度上来说树和链表都是图的一种特例. 一.图的抽象数据类型 二.表示图的方法 图是由结点和边构 ...

随机推荐

Java Web Service 学习

参考原文: http://blog.csdn.net/ostrichmyself/article/details/6393627 http://www.cnblogs.com/Jessy/p/3528 ...

web去掉浏览器自带默认样式

@charset "utf-8"; ;;} body{font-size:12px;} img{border:none;} ul,ol{list-style:none;} inpu ...

Qt中实现将float类型转换为QString类型

在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的时候下面是我所有的方法: 1. 将QString类型转化为float类型,很简单 QString data; fl ...

vue&period;js的学习

c语言六度空间问题及答案大全,C 六度空间理论的实现相关推荐

  1. C语言,1 3 5 7 9…… 9999,《C语言数据结构》第1至9章自测题答案大全一创新.doc...

    <C语言数据结构>第1至9章自测题答案大全一创新.doc 第一章概论 自测题答案 姓名 班级 题号一二三四五六总分题分3315982015100得分 一.填空题(每空1分,共33分) 1. ...

  2. c语言程序设计7.4思考题答案,C语言程序设计习题集及答案(7)

    2 下面函数的功能是将一个整数字符串转换为一个整数,例如:\1234\转换为1234,请填空使程序完整. int chnum(char *p) { int num=0,k,len,j; len=str ...

  3. C语言程序设计习题参考答案

    C语言QQ群:108168489 此群是普通群,限100人.无法容纳所有C语言同学,敬请谅解. 申请加入务必注明[班级和姓名](不注明班级和姓名,拒绝加入),加入群后修改群名片.课程结束后[取消该群] ...

  4. python看图猜成语_看图猜成语200个图答案 看图猜成语图片答案大全

    看图猜成语2游戏v1.40苹果版 类型:ios休闲益智大小:100M语言:中文 评分:10.0 标签: 立即下载 看图猜成语200个图答案 看图猜成语图片答案大全.看图猜成语是一款很受欢迎的休闲猜谜类 ...

  5. java面试题答案大全超详细(持续更新)

    java面试题答案大全超详细 第01章 java语言面试题 项目经理(作者):张明星 JVM 运行时数据区是什么? 程序计数器是什么? 程序计数器(线程私有) Java 虚拟机栈的作用? 本地方法栈的 ...

  6. c语言综合设计题带答案,c语言程序设计题目及答案

    pp[j]=tt[0][j]; for(i=1;ipp[j]) pp[j]=tt[i][j]; } 第3题 题号:375 功能:从键盘上输入任意实数,求出其所对应的函数值. z=e的x次幂(x> ...

  7. 吉大c语言程序设计作业一,吉林大学历年C语言程序设计试题及答案.doc

    吉林大学历年C语言程序设计试题及答案 吉林大学历年C语言程序设计试题及答案(5)END 2000年试题答案 一.(1)解题思想: 用5个数 a,b,c,d,e,来回替换,最终f(n)算出. 设计程序如 ...

  8. c语言输入后没答案,C语言章节习题及答案(无指针)解读.doc

    C语言章节习题及答案(无指针)解读 <C程序设计>复习题集 第2章 基础概念 一.选择题(在下列各题的A).B).C).D)四个选项中,只有一个选项是正确的) 2.1以下叙述中正确的是 A ...

  9. 海伦公式c语言编程funcd,c语言编程练习题及答案_0.doc

    c语言编程练习题及答案_0 精品文档 2016全新精品资料-全新公文范文-全程指导写作 –独家原创 PAGE1 / NUMPAGES19 c语言编程练习题及答案 学生数 印数 考核方式 闭卷 考核时间 ...

最新文章

  1. 一图胜千言!数据可视化多维讲解
  2. ASP.NET用户控件的创建和使用
  3. PHP中IP地址与整型数字互相转换详解
  4. Property 'submit' of object #HTMLFormElement is not a function
  5. I. Intersections
  6. 文字在图片上c语言,HTML让文字在图片上显示的几种方法
  7. [Codeforces Round #195 (Div. 2)] A. Vasily the Bear and Triangle
  8. 总结 10 年前端经验,谈谈前端人如何更快地成长
  9. javascript中的this指向问题总结
  10. OpenCV之图像腐蚀
  11. 【机器视觉】独家盘点:详解国内外34家物联网机器视觉技术企业
  12. WordPress多功能主题 The7 更新至 v10.4.3 – 已激活汉化版
  13. ctc系统通信前置服务器,CTC系统包括哪些接口服务器?
  14. android手机接投影仪,手机投屏到投影仪的几种方法
  15. 低调,中国的FPGA到底有多强?
  16. Docker安装(Alibaba Cloud Linux 3)
  17. 软考A计划-软件设计师(高级程序员)考试大纲
  18. ZYNQ裸机LWIP双网口实现
  19. java.security Cipher 对象详细介绍
  20. 瑜伽美体塑形馆小程序课程报名系统开发制作

热门文章

  1. 云服务器还是服务器托管,中小企业应如何选择?
  2. 【Christopher Manning课件】词汇习得Lexical Acquisition
  3. 技术视角——QA角度看技术方案评审
  4. 404 Not Found错误页面的解决方法和注意事项
  5. 虚拟机 全局代理 主机代理_比较虚拟代理与真实代理的性能
  6. 云原生Web服务框架ESA Restlight
  7. 小H和迷宫(C++)
  8. python 支付宝接口_python调用支付宝支付接口流程
  9. 页面的任何位置,按下键盘,获取按键的值
  10. 编译原理(龙书第二版)--怎么求FIRST集