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


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

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

输入格式:
输入第1行给出两个正整数,分别表示社交网络图的结点数N(1<N≤10^4,表示人数)、边数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%

这道题就是一个图中的限制搜索问题,最好的方法是使用BFS,使用DFS会有一个问题,待会我把我的DFS问题代码放上来,然后再把用Floyd算法做的放上来,让你们见识下O(N^3)的时间复杂度 其实是懒得改了,一开始写的DFS,懒得改成BFS
这道题规规矩矩写BFS就好,别来些骚操作。。。

DFS代码:

#include<stdio.h>
#include<stdbool.h>bool degree[10001][10001];   //直接使用全局变量
bool in[10001];
int number;void InSix(int now,int length,int depth);int main(void)
{int i,j;int N,M;scanf("%d %d",&N,&M);  //读入边和节点for(i=0;i<N+1;i++)for(j=0;j<N+1;j++)if(i==j)degree[i][j]=true;        //表示自己为第零度的elsedegree[i][j]=false;       //表示为连通for(i=0;i<M;i++){int m,n;scanf("%d %d",&m,&n);degree[m][n]=true;degree[n][m]=true;}                   //读入数据for(i=1;i<=N;i++){float ratio;for(j=1;j<=N;j++)in[j]=false;in[i]=true;number=1;InSix(i,N+1,0);if(1==number)printf("0.00%%\n");else{ratio=number*1.0/N;printf("%d: %.2f%%\n",i,ratio*100);}}return 0;
}void InSix(int now,int length,int depth)
{           //now 表示当前元素序号  count 为第几度 number 为当前个数if(6==depth)return ;int i;for(i=1;i<length;i++){if(degree[now][i]&&!in[i]){in[i]=true;number++;InSix(i,length,depth+1);}}return ;
}

然后结果就是最后一个点一直过不去:

在找了好久的错误,结果我没啥发现,然后在别人的blog下找到了原因,在这里感谢这位老哥:

那么DFS的问题就是这样的,我寻思了下怎么该,发现还真不好改,所以就该用Floyd玩玩,用Floyd其实就是把各点的距离算出来,然后就直接判断那些点的距离小于等于6.
在这个题中,我发现一个比较有意思的点,它对孤立的点的正确的判断是有两种方法的,你可以算成0,也可以把自己算进去。
下面给O(N^3)的代码和爆炸的时间:

#include<stdio.h>
#include<stdbool.h>#define INF 99999int distance[10001][10001];   //直接使用全局变量int main(void)
{int i,j,k;int N,M;int number;               //符合六度空间的节点数目fscanf(stdin,"%d %d",&N,&M);  //读入边和节点for(i=0;i<N+1;i++)for(j=0;j<N+1;j++)if(i==j)distance[i][j]=0;        //表示自己为第零度的elsedistance[i][j]=INF;       //表示为不连通for(i=0;i<M;i++){int m,n;fscanf(stdin,"%d %d",&m,&n);distance[m][n]=1;distance[n][m]=1;}                   //读入数据for(k=1;k<=N;k++){for(i=1;i<=N;i++){for(j=1;j<=N;j++)if(distance[i][j]>distance[i][k]+distance[k][j])distance[i][j]=distance[j][i]=distance[i][k]+distance[k][j];}}for(i=1;i<=N;i++){double ratio;number=0;for(j=1;j<=N;j++)if(distance[i][j]<=6)number++;ratio=number*1.0/N;printf("%d: %.2lf%%\n",i,ratio*100);}return 0;
}


这个时间这是要了老命了。。。

PTA 数据结构与算法 7-7 六度空间相关推荐

  1. PTA数据结构与算法题目集6-4 6-3 6-8

    PTA数据结构与算法题目集(中文) 6-4 链式表的按序号查找 ElementType FindKth( List L, int K ){int index = 0;while(L){++index; ...

  2. PTA数据结构与算法题目集 6-9 二叉树的遍历

    PTA数据结构与算法题目集(中文) 6-9 二叉树的遍历 void InorderTraversal( BinTree BT ){if(BT==NULL)return;if(BT->Left){ ...

  3. PTA 数据结构与算法题目集(中文)

    一:数据结构与算法题目(中文版) 7-2 一元多项式的乘法与加法运算 (20 分) 7-3 树的同构 (25 分) 7-4 是否同一棵二叉搜索树 (25 分) 7-6 列出连通集 (25 分)(详解) ...

  4. PTA 数据结构与算法题目集(中文) 7-10 公路村村通 (30分) 最小生成树(kruskal算法)

    我的GIS/CS学习笔记:https://github.com/yunwei37/ZJU-CS-GIS-ClassNotes <一个浙江大学本科生的计算机.地理信息科学知识库 > 还有不少 ...

  5. 浙大PTA数据结构与算法题目集(中文)题解集复习用

    文章目录 7-1 最大子列和问题 (20分)(dp或贪心) 7-2 一元多项式的乘法与加法运算 (20分) 7-3 树的同构 (25分) 7-4 是否同一棵二叉搜索树 (25分) 7-5 堆中的路径 ...

  6. 7-10 公路村村通 (最小生成树Prim算法) | PTA数据结构与算法——C语言实现

    公路村村通 非常直白的最小生成树问题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通 ...

  7. PTA数据结构与算法-第一章——褚论

    文章目录 第一章--褚论 第二章--线性表 第三章--栈与队列 第四章--字符串 第五章--树与二叉树 第六章--图 第七章--排序 第八章--检索 判断题 单选题 程序填空题 第一章--褚论 第二章 ...

  8. PTA 数据结构与算法A实验八排序

    7-1 统计工龄 (20 分) 给定公司N名员工的工龄,要求按工龄增序输出每个工龄段有多少员工. 输入格式: 输入首先给出正整数N(≤10 5 ),即员工总人数:随后给出N个整数,即每个员工的工龄,范 ...

  9. 7-16 Sort with Swap(0, i) | PTA数据结构与算法——C语言实现

    2013年浙江大学免试研究生上机考试真题. 原题链接:PTA | 程序设计类实验辅助教学平台 题目描述 给定包含数字 {0, 1, 2,..., N−1} 的任一排列,很容易对它们进行升序排序. 但是 ...

最新文章

  1. SAP Cloud for Customer的HTML Mashup渲染原理
  2. 【渝粤教育】国家开放大学2018年春季 8039-22T二手车评估 参考试题
  3. 白盒测试六种方法案例分析
  4. 数据安全治理的几个基本问题
  5. W3C 宣布:WebAuthn 成为正式 Web 标准
  6. 使用idea开发SpringBoot应用,添加@SpringBootApplication注解时,不能自动提示
  7. ubuntu下vscode字体间距 空格间距太小 增大间距
  8. python办公自动化实例(四):批量生成CAD图纸
  9. http://www.techpot.net/archives/38147
  10. 苹果电脑各型号支持的macOS版本列表
  11. python常量列表_秦路天善智能python学习笔记1-数据类型,常量,变量,列表,字典,元组...
  12. JVM中类加载的时机
  13. 博途软件中多重背景块的建立_TIA博途软件中创建多重背景函数块
  14. ​​​​​​过滤器和拦截器详解
  15. KnockoutJs 进阶学习
  16. 【计算机网络】计算机网络基础知识(三次握手,四次挥手,OSI七层网络模型)
  17. 交互设计师的这些能力你都具备了吗
  18. 核心案例|国防科技大学虚实结合的无人机集群系统
  19. blender建模基础操作
  20. 基于C++实现的用于OpenAL的 .wav音频加载器

热门文章

  1. eclipse 不提示错误
  2. 京东万象:通过以太坊联盟链解决数据流通的信任难题
  3. STM32(四)嵌入式浅谈与学习方法
  4. JavaScript 开发人员需要知道的简写技巧
  5. TCP第三次握手失败会怎么样
  6. 金蝶K3 11.0-K3HR系统在Win2003环境的设置指南
  7. H5直播站点运维笔记一 服务器篇
  8. 轻松学c语言编程.pdf等,轻松学编程:轻松学C语言编程 PDF
  9. 华为究竟是一种什么文化?
  10. 辽宁大学--数据库应用技术--新闻网站--期末大作业