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

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

dfs最后一个点过不了,因为当遍历一个点后距离大于6,返回到初始点时 ,还有一条可以直达这个点的路径,但因为已经标记过了,所以便不在访问。本题正解应该是bfs,dfs是歪门邪道qwq
dfs代码如下(27分)

#include<iostream>
#include<algorithm>
#include<cstring>
#include<vector>
using namespace std;
const int N =  1010 ;
int n,m;
double flag;
vector<int>s[N];
bool st[1010];
void dfs(int u,int cnt){if(cnt>6)return ;   st[u]=1;flag++;for(int i=0;i<s[u].size();i++){if(!st[s[u][i]]){dfs(s[u][i],cnt+1);}}
}
int main(){cin>>n>>m;for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);s[a].push_back(b);s[b].push_back(a);}for(int i=1;i<=n;i++){   memset(st,0,sizeof st);flag=0;   dfs(i,0);printf("%d: %.2lf%\n",i,flag/n*100);}
}

bfs代码如下

#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
typedef pair<int,int>pii;
const int N =  1010 ;
int n,m;
double flag;
vector<int>s[N];
bool st[1010];
void bfs(int u){queue<pii>q;q.push({u,0});while(q.size()){auto x=q.front();q.pop();int a=x.first,b=x.second;if(b>6)return;   if(!st[a]){ flag++;for(int i=0;i<s[a].size();i++)q.push({s[a][i],b+1}); st[a]=1;}}
}
int main(){cin>>n>>m;for(int i=0;i<m;i++){int a,b;scanf("%d%d",&a,&b);s[a].push_back(b);s[b].push_back(a);}for(int i=1;i<=n;i++){   memset(st,0,sizeof st);flag=0;   bfs(i);printf("%d: %.2lf%\n",i,flag/n*100);}
}

7-7 六度空间 (30 point(s))相关推荐

  1. 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)

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

  2. 05-3. 六度空间 (30)

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

  3. **06-图3 六度空间 (30 分)**

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

  4. 7-7 六度空间 (30分)_近30年仅6人生涯总决赛首秀得分30+ 浓眉哥能成下一个吗

    在竞争激烈的总决赛上要想得到高分并不容易,一个球员在第一次站上总决赛的舞台的时候要想得到高分更不容易,即使是强如勒布朗-詹姆斯在个人NBA生涯的总决赛首秀中也只是得到14分而已.近30年NBA历史上仅 ...

  5. 7-7 六度空间 (30分)_现役球员中,谁最可能成下一位30000分先生?3大前十巨星没戏...

    想要在NBA联盟得到3万分有多难?从联盟成立至今的70多年中,总得分超过3万分的球员一共只有7位,他们分别是贾巴尔.马龙.詹姆斯.科比.乔丹.诺维茨基和张伯伦,剩下的强如大鲨鱼.艾弗森都没能完成这一壮 ...

  6. PTA_数据结构与算法_7-7 六度空间 (30分)

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

  7. 7-7 六度空间 (30分) 【最短路径(Floyd)】

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

  8. 06-图3. 六度空间 (30)

    数据有1万个,邻接矩阵挂了,所以只能套邻接表.第一次直接是套的模板,搜索过程也是参考教材指导书上的实现. #include<stdio.h> #include<string.h> ...

  9. 图的广度优先遍历-06-图3 六度空间

    题目 06-图3 六度空间 (30分) 分析 本题需要输出距离不超过6的结点数占结点总数的百分比,首先肯定想到要用广度优先遍历(BFS),而且只需要遍历6层以内的结点.可以用一个变量level来记录层 ...

最新文章

  1. adb devices只显示List of devices attached
  2. ​炸了!程序员现在没有这点技能都还不能就业了?
  3. linux中readl()和writel()函数---用于读写寄存器
  4. R语言使用ggplot2同时可视化dataframe的多个数据列实战:多个数据列可视化在同一个图中、多个数据列可视化在多个图中(纵向多个子图)
  5. Linux 内核的一个问题
  6. .NET 反编译调试神器:dnSpy了解一下
  7. c监控进程发现未启动就启动进程_非常有用的16个Linux 服务器监控命令
  8. Web前端开发入门之网页制作三要素!
  9. python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介
  10. 三个案例快速入门Nettty
  11. 【李宏毅机器学习】Brief Introduction of Deep Learning 深度学习简介(p12) 学习笔记
  12. 从零开始刷Leetcode——数组(122.167.169)
  13. SpringData ES中一些底层原理的分析
  14. Android 7.1 32位apk导致的系统库找不到问题
  15. 无损分区工具调整硬盘分区
  16. 用C语言数组编写贪吃蛇
  17. Android Binder机制详解
  18. 腾讯云即时通讯IM前端使用步骤简述
  19. vnc远程控制软件 有哪些vnc远程控制软件推荐
  20. test1asfd 按时收费的水电费阿萨德阿斯蒂芬啊

热门文章

  1. python打开本地浏览器_使用webdriver打开本地浏览器--python版
  2. MinGW-w64 C/C++编译器各版本说明
  3. 分类模型到底如何选择
  4. USB 设备驱动之设备接入梳理(六)
  5. 用c语言如何制作抖动窗口,C语言实现自动给QQ好友发窗口抖动
  6. 如何对“诱惑”说不?
  7. vue 配置文件不打包
  8. NAT模式/路由模式/全路由模式
  9. 深谈SCI论文写作技巧
  10. Wordpress网页直接插入bilibili视频方法