XMU 算法分析与设计第三次上机题解

XMU 数字图像处理实验3 VC MFC 读取位图BMP 希望大家自己做哈,当作参考,不要抄袭= =(被查出来就不好了) 实验三:编写DIB图象读/写程序 信息科学与技术学院      计算机科学与技术   2292015220xxxx xxx 一、实验名称        编写DIB图象读/写程序 二、实验内容        用VC++实现DIB位图(. BMP)的显示、读文件、另存文件及相互转换格式。        实验使用的操作 阅读详情


在这里插入图片描述

一、BFS试炼之微博转发

BFS试炼之微博转发

描述

微博上的用户既可能有很多关注者,也可能关注很多其他用户。

因此,形成了一种基于这些关注关系的社交网络。

当用户在微博上发布帖子时,他/她的所有关注者都可以查看并转发他/她的帖子,然后这些人的关注者可以对内容再次转发…

现在给定一个社交网络,假设只考虑L层关注者,请你计算某些用户的帖子的最大可能转发量。

补充

如果B是A的关注者,C是B的关注者,那么AA的第一层关注者是B,第二层关注者是C。

输入

第一行包含两个整数,N表示用户数量,LL示需要考虑的关注者的层数。

假设,所有的用户的编号为1∼N。

接下来N行,每行包含一个用户的关注信息,格式如下:

M[i] user_list[i]

M[i]是第ii名用户关注的总人数,user_list[i]是第ii名用户关注的M[i]个用户的编号列表。

最后一行首先包含一个整数K,表示询问次数,然后包含K个用户编号,表示询问这些人的帖子的最大可能转发量。

数据范围

1≤N≤1000,
1≤L≤6,
1≤M[i]≤100,
1≤K≤N

输出

按顺序,每行输出一个被询问人的帖子最大可能转发量。

假设每名用户初次看到帖子时,都会转发帖子,只考虑L层关注者。

输入样例 1

7 3
3 2 3 4
0
2 5 6
2 3 1
2 3 4
1 4
1 5
2 2 6

输出样例 1

4
5

解题思路:

  • 可以转变为,求解一张有向图中,到指定点的距离 ≤ \leq ≤L的点的个数。即用BFS来遍历图
  • 若A关注了B,则B的帖子可以抵达A,A可以转发B的帖子。创建<B,A>边
  • 用链式前向星创建图

代码实现:

#include<iostream>
#include<queue>
#include<string.h>
#define MaxSize 1050
using namespace std;
int N, L, K;

//无权值的链式前向星
typedef struct Edge {
   
   
	int to,next;
} Edge;
int tot;
int head[MaxSize];//head[i],第i个点的第一个孩子结点的索引
Edge edge[MaxSize];

//加边函数
void add_edge(int u, int v) {
   
    //u为起点,v为终点,w为权值
	edge[tot].to = v; //tot为空结点指针
	edge[tot].next = head[u];
	head[u] = tot++;//tot为任一个未被使用的空节点指针。
}
int BFS(int num) {
   
   
	int sum = 0;
	int flag[MaxSize] = {
   
   0};//标记已满足要求的点
	flag[num]=1;
	queue<int> q;
	for (int i = head[num]; i != -1; i = edge[i].next) {
   
   
		q.push(edge[i].to);
		flag[edge[i].to] = 1;
		sum++;
	}

	for (int i = 2; i <= L; i++) {
   
   
		int Q_size = q.size();//存每一层的大小
		while (Q_size--) {
   
   
			int t = q.front();//取栈顶
			q.pop();
			for (int j = head[t]; j != -1; j = edge[j].next) {
   
   
				if (flag[edge[j].to] != 1) {
   
   //若未取过
					q.push(edge[j].to);
					flag[edge[j].to] = 1;
					sum++;
				}
			}
		}
	}
	return sum;
}
int main() {
   
   
	cin >> N >> L;
	memset(head, -1, sizeof head);
	//输入数据
	int x, y;
	for (int i = 1; i <= N; i++) {
   
   
		cin >> x;
		for (int j = 0; j < x; j++) {
   
   
			cin >> y;
			add_edge(y, i);
		}
	}
    //查看图的建立是否正确
//	for (int i = 1; i <= MaxSize; i++) { //从1开始
//		for (int j = head[i]; j != -1; j = edge[j].next) {
   
   
//			printf("结点%d->结点%d\n", i, edge[j].to);
//		}
//	}
	//咨询K个人的转发量
	cin >> K;
	int num;
	while (K--) {
   
   
		cin >> num;
		cout << BFS(num)<<endl;
	}
}

二、DFS试炼之不同路径数

DFS试炼之不同路径数

描述

给定一个n×m的二维矩阵,其中的每个元素都是一个[1,9]之间的正整数。

从矩阵中的任意位置出发,每次可以沿上下左右四个方向前进一步,走过的位置可以重复走。

走了k次后,经过的元素会构成一个(k+1)位数。

请求出一共可以走出多少个不同的(k+1)位数。

输入

第一行包含三个整数n,m,k。

接下来n行,每行包含m个空格隔开的整数,表示给定矩阵。

数据范围

1≤n,m≤5,

0≤k≤5,

m×n>1

输出

输出一个整数,表示可以走出的不同(k+1)位数的个数。

输入样例 1

3 3 2
1 1 1
1 1 1
2 1 1

输出样例 1

5

解题思路:

  • 根据题意,可以用DFS遍历得到,从[x,y]出发走k步的每一种情况
  • 将每种情况存入set集合即可自动去重
  • 注意:每一步不能同时走x,y

代码实现:

#include<iostream>
#include<set>
using namespace std;
set<int> s;
int n, m, k;
int Arr[10][10];

int dx[4] = {
   
   -1, 0, 1, 0}, dy[4] = {
   
   0, 1, 0,-1};//一次走一步,走x不走y
void dfs(int x, int y, int q, int value) {
   
    //第q步的横坐标x,纵坐标y,当前值value
	if (q == k) {
   
   //若为第k步,将当前值加入set
		s.insert(value);
		return ;
	}
	for (int i = 0; i < 4; i++) {
   
   
		int xx = x + dx[i];
		int yy = y + dy[i];
		if (xx < n && yy < m && xx >= 0 && yy >= 0)
			dfs(xx, yy, q + 1, value * 10 + Arr[xx][yy]);
	}
}
int main() {
   
   
	cin 
PLC编程标准之争:IEC61131与IEC61499核心区别与选型指南 在工业自动化领域,PLC编程长期依赖IEC61131标准,它定义了梯形图、结构化文本等语言,通过周期扫描机制保证确定性执行。然而,随着工业4.0和分布式控制场景的兴起,IEC61499以事件驱动模型打破传统范式,让功能块能跨设备协同,实现更灵活的柔性产线和模块化系统。理解两者在程序结构、数据交互、部署方式和实时性上的差异,是选型与工程落地的关键。本文从基础概念出发,剖析执行模型与架构演进,结合一线调试经验,帮助工程师在传统PLC与下一代标准之间做出理性决策。 阅读详情

相关推荐

Spring Boot集成Jasypt踩坑实录:自定义SM4加密器Bean加载失败的终极解决方案

本文深入剖析了Spring Boot集成Jasypt时自定义SM4加密器Bean加载失败的根源,即Spring Boot启动流程中Bean加载顺序与Jasypt自动配置的时序冲突。文章提供了三种从源码层面解决问题的有效方案,包括使用ApplicationContextInitializer提前注册、调整Bean依赖顺序以及自定义PropertySource处理机制,并给出了完整的国密SM4加密器实现与测试示例。

weixin_29294975的博客 200

【物联网原理与应用】实验三:RFID低频卡实验——门禁系统

【物联网原理与应用】实验三:RFID低频卡实验——门禁系统

m0_74164458的博客 3999

拆解英飞凌CoolGaN:如何用Silvaco TCAD仿真评估功率GaN HEMT的关键性能(BV、Qg、开关损耗)

本文详细解析了如何使用Silvaco TCAD仿真工具评估英飞凌CoolGaN功率GaN HEMT的关键性能指标,包括击穿电压(BV)、栅电荷(Qg)和开关损耗。通过精确建模极化效应、优化边缘终端结构以及高频开关损耗仿真技术,为功率器件工程师提供了一套完整的'设计-仿真-验证'方法论,助力GaN HEMT在快充、数据中心电源等领域的应用。

weixin_29159995的博客 426

华为OD机试真题 新系统【查找能被整除的最大整数】

华为OD新系统机试真题【查找能被整除的最大整数】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【查找能被整除的最大整数】

qq_45776114的博客 671

【Windows Server 2019】发布服务器 | 远程桌面服务的安装与配置 Ⅰ——理论,实验拓扑和安装基于RemoteAPP的RDS

博客介绍了Windows Server中远程桌面服务的理论,实验拓扑以及基于RemoteAPP的RDS安装。博文介绍了如何在Windows Server上部署发布服务器。

VMware, Windows, Linux, Cisco, Container, Kubernetes, Kali 6128

从你的全世界路过---陌陌X-SIGN还原

我们上期介绍了hook 接口方式,今天我分析so 层。学习是为了复杂的事情简单化。不用如此繁琐。跟进native_sdbyecbu37x这个函数,我们f5看伪代码 v13 = sign(v9, v10, v11, a6); 跟进这个函数 代码如下(示例): 2.代码贴入 SHA消息摘要java代码如下: java 代码如下(示例): 总结 算法,结合动态调试!

任雪飘的博客 2297

OpenClaw零基础教程:30分钟搭建你的第一个AI自动化助手

别再看那些满是代码、专业术语的教程了,那些都是给程序员看的。这篇教程,我把所有步骤拆到了极致,你跟着点鼠标就行,点错了都没关系,大不了重装一遍,5分钟的事。

2601_94871597的博客 96

一文探讨视频秒开:m3u8视频格式与视频秒开优化

秒开指的是,一秒内成功加载的播放数/播放总数。本意是想对比一下m3u8与mp4视频格式,并了解m3u8格式优缺点,以确定一个大概优化方向。但对m3u8做简单了解后,觉的m3u8可能是一个优化方向。

bjxiaxueliang的CODING小栈 2万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: 美赛赛前准备(一)-软件技能篇
下一篇: 【XMU学科实践二】颜值打分代码实例讲解(paddle框架)
快苏排序OAO
博客等级 码龄5年 273粉丝 69原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快苏排序OAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值