浙大数据结构慕课课后题(06-图3 六度空间)

news2024/9/21 18:52:42

题目要求:

输入格式:

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

题解: 

        思路如注释所示,可通过所有测试点。 

#include<bits/stdc++.h>
using namespace std;

const int MAX_N = 1005; 
vector<vector<int>> sds;  //二维动态数组 
bool vis[MAX_N];

int BFS(int v){
	int count = 1,level = 0,last = v,tail;
	queue<int> q;
	q.push(v);
	vis[v] = true;
	while(!q.empty()){
		int u = q.front();
		q.pop();

		for(int w : sds[u]){
			if(!vis[w]){
				vis[w] = true;
				q.push(w); count++;
				tail = w;		
			}	
		} 
		if(u == last){
			level++; last = tail;
		}
		if(level == 6) break;
	}
	return count;
}


int main(){
	int N,M;
	cin>>N>>M;
	
	sds.resize(N+1);           //动态设置sds数组的大小 
	fill(vis,vis + N + 1,false);   //初始化vis数组 
	
	for(int i = 0; i < M; i++){
		int u,v;
		cin>>u>>v;
		sds[u].push_back(v);
		sds[v].push_back(u);
	}	
	
	for(int i = 1; i <= N; i++){
		int count = BFS(i);	      //BFS函数的返回值即为符合要求的结点数目 
		double ans = 100.0*count/N;
		printf("%d: %.2f%%\n", i, ans);		
	
		fill(vis,vis+N+1,false);    //初始化vis数组 
	}
	return 0;
}

总结: 

1. vector二维数组的声名格式有两种:假设数组名为sds。

(1)如果我们提前知道了数组的大小可以这样定义:

MAX_N=1005;

vector<int> sds[MAX_N];

(2)如果不知道数组大小,又需要全局声名就要在main函数外这样定义: 

vector<vector<int>> sds;

然后在main函数里面这样确定数组大小:

int main(){

...

cin>>N;

sds.resize(N);        //resize()函数

...

}

2.在取百分号时,乘数100要写成100.0  虽然在代码中 用了一个double类型的数据来接收计算结果,但是如果写的是(*100)那么编译器会先进行整数乘法,再用浮点数来存取,精度已经损失了,测试点中有两个例子卡的就是这个地方(别问我怎么知道的@_@)。

3.此题的思路比较巧妙,用一个last变量来存储一层的最后一个元素,如果这个元素被弹出,则说明这一层已经遍历完成,从而实现对层数的控制,当层数>=6时,函数终止。

4.题目内容说完了,下面是关于dev编译器,我用的是比较老的devc++,因为看重了它的简洁,但是如果要用到一些c++11的特性,比如本题中的foreach循环会报错,要在这个地方设置一下。

找到编译器选项,加入红框里的语句即可。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039383.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

简单案例:搞定 SpringBoot 接口恶意刷新和暴力请求

​ 博客主页: 南来_北往 系列专栏&#xff1a;Spring Boot实战 前言 恶意刷新和暴力请求是指攻击者通过大量重复发送请求来对服务器进行攻击的行为。这些请求可能包括频繁刷新页面、提交表单、尝试登录等&#xff0c;旨在消耗服务器资源、导致服务不可用或破坏正常用户的…

WSL 忘记ubuntu的密码

文章目录 1. 以管理员身份打开 PowerShel2.输入命令 wsl.exe -d Ubuntu-20.04 --user root3.输入命令 passwd username 修改用户密码&#xff0c;username即待重置的用户的名称 1. 以管理员身份打开 PowerShel 2.输入命令 wsl.exe -d Ubuntu-20.04 --user root 注意版本号是自…

机械行业数字化生产供应链产品解决方案(一)

在机械行业数字化生产供应链产品解决方案中&#xff0c;通过全面融合物联网技术、数据分析、自动化控制系统和智能供应链管理平台&#xff0c;企业能够实现生产过程的实时监控、智能优化和高效管理&#xff0c;从而显著提升生产效率、降低运营成本&#xff0c;并增强供应链的响…

自动化基础知识

丝杆滑台 滚珠丝干设计时&#xff0c;尽量直线导轨比滚珠丝杆高一点点&#xff0c;安装时在滚珠丝杆处垫调整硅钢片。

猫头虎 分享已解决Bug || ImportError: No module named ‘django‘ 解决方案

猫头虎 分享已解决Bug || ImportError: No module named django 解决方案 摘要 &#x1f31f; 大家好&#xff01;我是你们的技术小伙伴 猫头虎&#xff0c;在日常开发中我们经常会遇到各种后端Bug&#xff0c;今天我将和大家分享一个非常常见但有时会让人头疼的Bug&#xff…

记一次:Datawhale AI夏令营-第四期-魔搭-AIGC-Task02

前言&#xff1a;上一篇我们按步骤跑了一遍Baseline也生成了8张故事图片&#xff0c;但是原理啥的都是一头雾水&#xff0c;因为是初学者&#xff0c;所以只能一点点的分析来理解消化。这篇咱们就深入的来了解一下相关的内容。根据内容自己总结理解和查询相关的一些资料。不正确…

Java基础之隐式类型转换

类型转换 基本数据类型表示范围大小排序&#xff1a; 在变量赋值及算术运算的过程中&#xff0c;经常会用到数据类型转换&#xff0c;其分为两类&#xff1a; 隐式类型转换 显式类型转换 1 隐式类型转换 情形1&#xff1a;赋值过程中&#xff0c;小数据类型值或变量可以直…

立即下载!Windows11电竞游戏版:流畅不卡顿!

今日&#xff0c;系统之家小编给大家带来2024年最新的Windows11电竞游戏版系统&#xff0c;该版本系统基于微软官方最新 Windows 11 22H2 22621 专业版进行离线优化&#xff0c;无病毒残留&#xff0c;且解决之前版本存在的问题&#xff0c;系统性能更优秀&#xff0c;有助于提…

AI学习记录 - 自注意力机制之权重矩阵和查询向量V矩阵的计算方式的补充

点个赞 如果我们熟悉自注意力的话&#xff0c;就会发现Q和K矩阵结合的时候&#xff0c;会有一个长度为句子长度的权重矩阵&#xff0c;假如有句子abc&#xff0c;求abc的注意力权重矩阵的话&#xff0c;那就是一个3*3的矩阵如下矩阵。 我们假设了句子长度为3&#xff0c;那么V…

React+AntDesign做一个日历,Calendar自定义headerRender

话不多说,直接贴效果图😄 日历是用的AntDesign提供的Calendar组件,这个组件还是蛮强大的,可以自定义头部时间下拉;渲染每个时间段,或者重置时间段内容,玩的空间是很大的 直接贴代码 第一步:下载js-calendar-converter添加到项目中,用于获取节假日等信息,如果需求…

C语言程序设计-[19] 二维数组

1、二维数组的定义 2、二维数组的初始化 注1&#xff1a;存储方式&#xff1a;二维数组的存放方式为: 按行存放。可将二维数组的元素看成若干个特殊的一维数组。 注2&#xff1a;前面讲过&#xff0c;对于一维数组&#xff1a;数组名代表该数组的首地址&#xff0c;即数组名d表…

Vue3使用ECharts的曲线条形堆叠混合图

先上效果图 图表容器 <div id"leftChart" style"height: 28vh"></div> <div id"rightChart" style"height: 28vh"></div> 监听resize视图窗口大小&#xff0c;可以让chart图表自适应大小 const leftChart …

数学:容斥原理

容斥原理是什么 不要想滴太复杂&#xff0c;这是单纯的数学问题&#xff0c;不是什么计算机原理&#xff0c;非常的简单&#xff0c;先来一道题&#xff0c;一个班级&#xff0c;有舞蹈队、信息队、篮球队三个队&#xff0c;信息队的有17人&#xff0c;篮球队的13人&#xff0…

云开发能力上新:云开发云数据库支持数据模型能力,支持多种数据库,多端SDK,简化关联关系管理,自动生成CRUD代码,一键生成应用,支持基于AI数据分析!

快速上手介绍 1.登录云开发工作台&#xff08;可通过微信开发者IDE-云开发-云后台&#xff0c;或直接访问链接 https://tcb.cloud.tencent.com/cloud-admin?_tcbProviderIdmp 登录&#xff09;&#xff1b; 2.选择“数据管理”&#xff1b; 3.选择“新建模型”&#xff0c;…

【EMC专题】ESD抑制器简要介绍

在ESD保护器件中可以分为陶瓷基类型和半导体基类型。其中有一类陶瓷基类型,使用的机制是电极间放电方法的产品就是ESD抑制器。本文章简要介绍了ESD抑制器的特点、基本结构和特性。 ESD抑制器的特点 ESD抑制器是间隙型的ESD(静电放电 Electrostatic Discharge)对策保护元件,…

超级字符串技能:提升你的编码游戏

嘿嘿,uu们,今天咱们来详解字符函数与字符串函数,好啦,废话不多讲,开干&#xff01; 1.:字符分类函数 C语言中又一系列的函数是专门做字符分类的,也就是一个字符属于什么类型的字符的,这些函数的使用需要包含头文件ctype.h 这些函数的使用方法都十分类似,博主在这里就举两到三个…

JavaScript 条件

条件语句用于基于不同条件执行不同的动作。 条件语句 在您写代码时&#xff0c;经常会需要基于不同判断执行不同的动作。 您可以在代码中使用条件语句来实现这一点。 在 JavaScript 中&#xff0c;我们可使用如下条件语句&#xff1a; 使用 if 来规定要执行的代码块&#…

【智能流体力学】ANSYS Fluent流体仿真学习流程和Fluent模型方法概述

目录 一、学习流程二、Fluent模型概述与方法介绍1. **稳态与瞬态流动模型**2. **层流与湍流模型**3. **可压缩与不可压缩流动模型**4. **传热模型**5. **多相流模型**6. **燃烧与化学反应模型**7. **噪声分析模型**8. **流-固耦合(FSI)与电磁场-流体耦合**9. **二次开发功能*…

前端工程化-01.前后端分离开发

一.传统的开发模式——前后端混合开发 二.目前的开发模式——前后端分离开发 三.接口文档 接口指的是业务功能&#xff0c;一个业务功能就会定义一个接口文档

第八季完美童模至尊天王大使·魏堃明 梦想为帆,少年荣耀启航!

7月20-23日&#xff0c;2024第八季完美童模全球总决赛在青岛圆满落幕。在盛大的颁奖典礼上&#xff0c;一位才能出众的小少年——魏堃明迎来了他舞台生涯的璀璨时刻。当聚光灯汇聚成一片璀璨的海洋&#xff0c;魏堃明踏着自信的步伐步入会场&#xff0c;身披精心设计的金色翅膀…