7-7 六度空间 (30 point(s))
假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比。
输入格式:
输入第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))相关推荐
- 7-7 六度空间 (30 分)(BFS遍历详解)(DFS最后一个点过不去)
7-7 六度空间 (30 分) 一:题目: 六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:&quo ...
- 05-3. 六度空间 (30)
05-3. 六度空间 (30) 时间限制 1500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard "六度空间"理论又称作"六度 ...
- **06-图3 六度空间 (30 分)**
06-图3 六度空间 (30 分) "六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:&q ...
- 7-7 六度空间 (30分)_近30年仅6人生涯总决赛首秀得分30+ 浓眉哥能成下一个吗
在竞争激烈的总决赛上要想得到高分并不容易,一个球员在第一次站上总决赛的舞台的时候要想得到高分更不容易,即使是强如勒布朗-詹姆斯在个人NBA生涯的总决赛首秀中也只是得到14分而已.近30年NBA历史上仅 ...
- 7-7 六度空间 (30分)_现役球员中,谁最可能成下一位30000分先生?3大前十巨星没戏...
想要在NBA联盟得到3万分有多难?从联盟成立至今的70多年中,总得分超过3万分的球员一共只有7位,他们分别是贾巴尔.马龙.詹姆斯.科比.乔丹.诺维茨基和张伯伦,剩下的强如大鲨鱼.艾弗森都没能完成这一壮 ...
- PTA_数据结构与算法_7-7 六度空间 (30分)
"六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:"你和任何一个陌生人之间所间隔 ...
- 7-7 六度空间 (30分) 【最短路径(Floyd)】
题目描述: "六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:"你和任何一个陌生 ...
- 06-图3. 六度空间 (30)
数据有1万个,邻接矩阵挂了,所以只能套邻接表.第一次直接是套的模板,搜索过程也是参考教材指导书上的实现. #include<stdio.h> #include<string.h> ...
- 图的广度优先遍历-06-图3 六度空间
题目 06-图3 六度空间 (30分) 分析 本题需要输出距离不超过6的结点数占结点总数的百分比,首先肯定想到要用广度优先遍历(BFS),而且只需要遍历6层以内的结点.可以用一个变量level来记录层 ...
最新文章
- adb devices只显示List of devices attached
- ​炸了!程序员现在没有这点技能都还不能就业了?
- linux中readl()和writel()函数---用于读写寄存器
- R语言使用ggplot2同时可视化dataframe的多个数据列实战:多个数据列可视化在同一个图中、多个数据列可视化在多个图中(纵向多个子图)
- Linux 内核的一个问题
- .NET 反编译调试神器:dnSpy了解一下
- c监控进程发现未启动就启动进程_非常有用的16个Linux 服务器监控命令
- Web前端开发入门之网页制作三要素!
- python云计算开发技术_云计算开发学习笔记:Python3 面向对象技术简介
- 三个案例快速入门Nettty
- 【李宏毅机器学习】Brief Introduction of Deep Learning 深度学习简介(p12) 学习笔记
- 从零开始刷Leetcode——数组(122.167.169)
- SpringData ES中一些底层原理的分析
- Android 7.1 32位apk导致的系统库找不到问题
- 无损分区工具调整硬盘分区
- 用C语言数组编写贪吃蛇
- Android Binder机制详解
- 腾讯云即时通讯IM前端使用步骤简述
- vnc远程控制软件 有哪些vnc远程控制软件推荐
- test1asfd 按时收费的水电费阿萨德阿斯蒂芬啊