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

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

时间限制

1500 ms

内存限制

65536 kB

代码长度限制

8000 B

判题程序

Standard

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

图6.4 六度空间示意图

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

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

输入格式说明:

输入第1行给出两个正整数,分别表示社交网络图的结点数N (1<N<=104,表示人数)、边数M(<=33*N,表示社交关系数)。随后的M行对应M条边,每行给出一对正整数,分别是该条边直接连通的两个结点的编号(节点从1到N编号)。

输出格式说明:

对每个结点输出与该结点距离不超过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%
#include <stdio.h>
#include <stdlib.h>
#define MAX 10010
struct Vertex{
	int val;
	struct Vertex *next;
};
int BFS(struct Vertex ** vertex, int i, int n) {		//广度优先搜索0
	int cnt = 0;						//记录6层内遍历到节点个数
	int visited[MAX] = {};
	int queue[MAX] = {};
	int head = 0, rear = 0;
	visited[i] = 1;
	queue[rear++] = i;					//将开始元素(0层)入队
	int level = 0;						//一层节点全部入队后,结尾再压入level值做标记,绝对值表示层数
	queue[rear++] = level;				//第0层标记入队
	while (rear > head) {				//队列非空
		int curr = queue[head++];		//出队
		if (curr == -6) {				//已遍历完第六层,结束
			break;
		}
		if (curr <= 0) {				//标记节点,表示一层已遍历完,将标记入队
			queue[rear++] = --level;
			continue;
		}
		++cnt;							//确定出队不是标记节点后,已遍历元素+1
		struct Vertex *p = vertex[curr];
		while (p) {						//将cuur节点的未访问邻接点全部入队
			if (!visited[p->val]) {
				visited[p->val] = 1;
				queue[rear++] = p->val;
			}
			p = p->next;
		}
	}
	return cnt;
}
int main() {
//	freopen("test.txt", "r", stdin);
	int n, m;
	scanf("%d%d", &n, &m);
	struct Vertex* vertex[MAX] = {};
	for (int i = 0; i < m; ++i) {		//构件图,邻接表实现
		int v1, v2;
		scanf("%d%d", &v1, &v2);
		struct Vertex *p = (struct Vertex *)malloc(sizeof(struct Vertex));
		p->next = vertex[v1];			//插入到链表头部
		p->val = v2;
		vertex[v1] = p;
		p = (struct Vertex *)malloc(sizeof(struct Vertex));
		p->next = vertex[v2];
		p->val = v1;
		vertex[v2] = p;
	}
	for (int i = 1; i <= n; ++i) {
		int cnt = 0;
		cnt = BFS(vertex, i, n);
		printf("%d: %.2f%%\n", i, 100.0 * cnt / n);
	}

	return 0;
}

题目链接:http://www.patest.cn/contests/mooc-ds/05-%E5%9B%BE3

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-01 14:50:38

05-图3. 六度空间 (30)的相关文章

PTA 5-7(中文) 六度空间 (30) - 图 - BFS

“六度空间”理论又称作“六度分隔(Six Degrees of Separation)”理论.这个理论可以通俗地阐述为:“你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人.”如图6.4所示. 图6.4 六度空间示意图 假如给你一个社交网络图,请你对每个节点计算符合“六度空间”理论的结点占结点总数的百分比. 输入格式说明: 输入第1行给出两个正整数,分别表示社交网络图的结点数N (1<N<=104,表示人数).边数M(<=33*N,表示社交关

数据结构学习笔记05图 (邻接矩阵 邻接表--&gt;BFS DFS)

数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边<v, w> 表示从v指向w的边(单行线) 不考虑重边和自回路 无向图:边是无向边(v, w) 有向图:边是有向边<v, w> 连通:如果从V到W存在一条(无向)路径,则称V和W是连通的 连通图(Connected Graph):如果对于图的任一两个顶点v.w∈V,v和w都是连通的,则称

7-7 六度空间(30 分)

"六度空间"理论又称作"六度分隔(Six Degrees of Separation)"理论.这个理论可以通俗地阐述为:"你和任何一个陌生人之间所间隔的人不会超过六个,也就是说,最多通过五个人你就能够认识任何一个陌生人."如图1所示. 图1 六度空间示意图 "六度空间"理论虽然得到广泛的认同,并且正在得到越来越多的应用.但是数十年来,试图验证这个理论始终是许多社会学家努力追求的目标.然而由于历史的原因,这样的研究具有太大的局限

1095. Cars on Campus (30)

Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at any specific time point, t

用 Python 通过马尔可夫随机场(MRF)与 Ising Model 进行二值图降噪

前言 这个降噪的模型来自 Christopher M. Bishop 的 Pattern Recognition And Machine Learning (就是神书 PRML……),问题是如何对一个添加了一定椒盐噪声(Salt-and-pepper Noise)(假设噪声比例不超过 10%)的二值图(Binary Image)去噪. 原图 添加 10% 椒盐噪声的图 建模 下文中的数学表示: yi:噪声图中的像素 xi:原图中的像素,对应噪声图中的 yi 既然噪声图是从原图添加噪声而来,我们拥

微信能修图!美图秀秀们惊恐之后该怎么做

众多移动应用中最能"抢戏"的,非微信莫属.微商的出现,抢了很多电商平台的销售份额:微信游戏的出现,让不少应用分发平台泪眼汪汪:公众号的出现让今日头条这样的资讯应用表示受伤的总是我:朋友圈的出现,连自家兄弟QQ空间都忍不下去了,支付宝都被逼出涉黄圈子来应对-- 可以说,微信每次的更新.添加的小动作啥的,都能激起"滔天骇浪",让整个移动圈颤三颤--毕竟数亿的用户基数不是是闹着玩的.近日,在最新版本中,微信增加了图片编辑功能.这对于以美图秀秀为代表的修图.P图.拍照应用来

1095. Cars on Campus (30)——PAT (Advanced Level) Practise

题目信息 1095. Cars on Campus (30) 时间限制220 ms 内存限制65536 kB 代码长度限制16000 B Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the informati

PAT 1095. Cars on Campus (30)

1095. Cars on Campus (30) Zhejiang University has 6 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at

1095 Cars on Campus(30 分

Zhejiang University has 8 campuses and a lot of gates. From each gate we can collect the in/out times and the plate numbers of the cars crossing the gate. Now with all the information available, you are supposed to tell, at any specific time point, t