搜索练习(地下城主,查找倍数)

地下城主

思路:这个其实就是bfs的板子,但是和以往的bfs不同,这个bfs适用于三维空间,也就是说多出一维需要进行搜索:

犯下的错误:在bfs的输出中我写成了cout<<q[tail].step+1<<endl;
由于在之前我就已经将step加过1了,所以输出这个tail所指向的队列还没有装入值(所以里面装的是脏数据),所以就会导致出错,应该是输出q[tail-1].step即可

收获到的东西:1.这毫无疑问是对我bfs的一次复习,bfs的具体步骤我都已经忘得差不多了 。
2.对于三维的方向数组我也有了了解,在之前二维图中方向数组是互补的,在三维数组中也是互补的。

代码如下:

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<cstdio>
#include<cstring>
#define Size 35
using namespace std;
char maze[Size][Size][Size];
bool vis[Size][Size][Size];
int dx[] = { 1,-1,0,0,0,0 };
int dy[] = { 0,0,1,-1,0,0 };
int dz[] = { 0,0,0,0,1,-1 };
int in_x, in_y, in_z;
int out_x, out_y, out_z;
int l, r, c;
typedef struct
{
	int x, y, z;
	int step;
}point;
void bfs()
{
	memset(vis, 0, sizeof(vis));
	int head = 1;
	int tail = 1;
	point q[Size * Size * Size];
	q[tail].x = in_x;
	q[tail].y = in_y;
	q[tail].z = in_z;
	q[tail].step = 0;
	vis[in_z][in_x][in_y] = true;
	tail++;
	while (head < tail)
	{
		for (int i = 0; i < 6; i++)
		{
			int tx = q[head].x + dx[i];
			int ty = q[head].y + dy[i];
			int tz = q[head].z + dz[i];
			if (vis[tz][tx][ty] || tz > l || tz<1 || tx>r || tx < 1 || ty<1 || ty>c)
				continue;
			if (maze[tz][tx][ty] != '#')
			{
				vis[tz][tx][ty] = true;
				q[tail].x = tx;
				q[tail].y = ty;
				q[tail].z = tz;
				q[tail].step = q[head].step + 1;
				tail++;
			}
			if (tx == out_x && ty == out_y && tz == out_z)
			{
				printf("Escaped in %d minute(s).\n", q[tail-1].step );
				return;
			}


		}
		head++;
	}
	cout << "Trapped!" << endl;
	return;
}
int main()
{
	while (true)
	{
		cin >> l >> r >> c;
		if (l == 0 && r == 0 && c == 0)
			return 0;
		for (int i = 1; i <= l; i++)
		{
			for (int j = 1; j <= r; j++)
			{
				for (int k = 1; k <= c; k++)
				{
					cin>>maze[i][j][k];
					if (maze[i][j][k] == 'S')
					{
						in_z = i;
						in_x = j;
						in_y = k;
					}
					if (maze[i][j][k] == 'E')
					{
						out_z = i;
						out_x = j;
						out_y = k;
					}
				}
			}
			getchar();
		}
		
		bfs();
	}
	return 0;
}

查找倍数

思路1bfs(时间会爆):主要思路就是第一个插入队列的数是1,然后又两种情况第一后面直接乘以10,第二种情况就是乘以10之后然后再加1。这样就将只有两种1或0的i情况全部把包括进去了(只有取或者不取这两种情况)
思路2dfs:其实和第一种思路差不多,主要就是将插入改成了dfs中的递归,主要还是要考虑一种特殊情况:当递归深度为19的时候就需要停止递归,由于这个数最大不会超过100,而每次递归最少都会增加10倍,所以当我们递归到19的时候就需要停止递归了。

收获到的东西:在之前我都是只靠数组按位进行树的相加,现在我知道了可以通过队列或者递归进行树的相加(当然也与这题的特殊性有关,毕竟只有0和1)

代码如下:

#include<iostream>
#include<stdio.h>
#include<cstring>
#include<string.h>
#include<queue>
using namespace std;
typedef long long ll;
int flag = 0;	
ll x;
void dfs(ll step,ll n)
{
	if(flag||step>=19)
	{
		return ;
	}
	if(n%x == 0)
	{
		cout << n <<endl;
		flag = 1;
		return ;
	}
	dfs(step+1,n*10);
	dfs(step+1,n*10+1);
}
int main()
{

	while(scanf("%lld",&x)!=EOF)
	{
		if(x == 0)
		{
			break;
		}
		flag = 0;
		dfs(0,1);
	}
	return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

机器人路径规划:基于流场寻路算法(Flow Field Pathfinding)的机器人路径规划(提供Python代码)

流场寻路算法(Flow Field Pathfinding)是一种基于流体动力学理论的路径规划算法&#xff0c;它模拟了流体在空间中的流动&#xff0c;并利用流体的运动特性来指导路径的选择。下面是流场寻路算法的基本介绍及算法描述&#xff1a; 1. 基本介绍 流场寻路算法通过将环境划分为网…

JWT原理

JWT 介绍 JWT&#xff08;JSON Web Token&#xff09;是一个开放标准&#xff08;RFC 7519&#xff09;&#xff0c;它定义了一种简洁的、自包含的方法用于通信双方之间以 JSON 对象的形式安全地传输信息。这种信息可以被验证和信任&#xff0c;因为它是数字签名的。JWT通常用于…

洛谷P1100 高低位交换

#先看题目 题目描述 给出一个小于 的非负整数。这个数可以用一个 32 位的二进制数表示&#xff08;不足 32 位用 0 补足&#xff09;。我们称这个二进制数的前 16 位为“高位”&#xff0c;后 16 位为“低位”。将它的高低位交换&#xff0c;我们可以得到一个新的数。试问这…

算法之前缀和

题目1: 【模板】一维前缀和&#xff08;easy&#xff09; 方法一: 暴力解法, 时间复杂度O(n*q), 当n10^5, q 10^5, 时间复杂度为O(10^10), 会超时. 方法二: 前缀和: 快速求出数组中某一段连续区间的和. 第一步: 预处理出来一个前缀和数组dp: 1. dp[i]表示区间[1,i]里所有元…

ConcurrentHashMap的相关介绍和使用

概述 ConcurrentHashMap是Java中提供的一个关于线程安全的哈希表实现&#xff0c;他是java.util.concurrent包的一部分&#xff0c;允许多个读操作并发进行&#xff0c;提高了并发环境下的性能。ConcurrentHashMap实现了ConcurrentMap接口&#xff0c;故而他也有ConcurrentMap…

2024.3.18

1、试编程 封装一个动物的基类&#xff0c;类中有私有成员:姓名&#xff0c;颜色&#xff0c;指针成员年纪再封装一个狗这样类&#xff0c;共有继承于动物类&#xff0c;自己拓展的私有成员有:指针成员:腿的个数(整型intcount)&#xff0c;共有成员函数:会叫:void speak() 要求…

ardupilot开发 --- 机载(边缘)计算机-VISP 篇

啊啊啊我的妻王氏宝钏 1. 一些概念 1. 一些概念 什么是VISP VISP即Visual servoing platform. Allows to control a robot equipped with a camera from measures extracted from the images.实现无人机飞行控制&#xff0c;机器人运动控制。实现实时目标检测。实现实时位姿估…

SpringCloud Sleuth 分布式请求链路跟踪

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第十篇&#xff0c;即介绍 Sleuth 分布式请求链路跟踪。 二、概述 2.1 出现的原因 在微服务框架中&…

什么是IoT物联网平台?

在数字化浪潮的席卷下&#xff0c;物联网&#xff08;IoT&#xff09;技术逐渐渗透到我们生活的方方面面&#xff0c;从智能家居到智慧城市&#xff0c;从工业自动化到智能农业&#xff0c;IoT正以其独特的魅力改变着世界。然而&#xff0c;当我们谈论IoT时&#xff0c;我们究竟…

maven一点通

1.maven简介 Maven是一个基于Java的工程构建工具&#xff0c;用于管理和构建项目的依赖关系。它提供了一种标准的项目结构和一组约定&#xff0c;使得项目的开发、构建、部署和文档化更加容易和可靠。 Maven的主要功能包括&#xff1a; 依赖管理&#xff1a;Maven可以自动下载…

elementui el-table表格自动循环滚动【超详细图解】

效果如图 1. 当表格内容超出时&#xff0c;自动滚动&#xff0c;滚动到最后一条之后在从头滚动。 2. 鼠标移入表格中&#xff0c;停止滚动&#xff1b;移出后&#xff0c;继续滚动。 直接贴代码 <template><div><div class"app-container"><e…

蓝桥杯前端Web赛道-输入搜索联想

蓝桥杯前端Web赛道-输入搜索联想 题目链接&#xff1a;1.输入搜索联想 - 蓝桥云课 (lanqiao.cn) 题目要求&#xff1a; 题目中还包含effect.gif 更详细的说明了需求 那么观察这道题需要做两件事情 把表头的每一个字母进行大写进行模糊查询 这里我们会用到几个js函数&#…

matlab FR共轭梯度法求解无约束问题

1、内容简介 略 75-可以交流、咨询、答疑 matlab FR共轭梯度法求解无约束问题 一维搜索 黄金搜索到单峰&#xff0c;单变量最小值 2、内容说明 略 Fletcher-Reeves共轭梯度法&#xff0c;简称FR法。 共轭梯度法的基本思想是把共轭性与最速下降方法相结合&#xff0c;利用…

rt-thread之通讯协议modbus软件包的使用记录(lwip+modbus组合)

前言 使用freemodbus软件包使用网口通讯(sallwip)ip地址使用dhcp动态获取 软件包 相关宏定义 /*-----------------------------------------NET 宏定义-------------------------------------------*/#define RT_USING_SAL #define SAL_INTERNET_CHECK /* Docking with prot…

mysqlcheck 数据完整性检查与修复

目录 mysqlcheck 命令文档 描述 选项 参数 示例 mysqlcheck 命令文档 mysqlcheck 是MySQL提供的一个工具&#xff0c;用于检查、修复、优化和分析数据库和表的健康状态。你可以使用它来确保数据库表的完整性和性能。 mysqlcheck [options] db_name [tbl_name ...]mysqlch…

德迅蜂巢(容器安全)全面出击

随着云计算的发展&#xff0c;以容器和微服务为代表的云原生技术&#xff0c;受到了人们的广泛关注&#xff0c;德迅云安全德迅蜂巢&#xff08;容器安全&#xff09;是企业容器运行时和容器编排的首要选择。然而&#xff0c;在应用容器过程中&#xff0c;大多数企业都遇到过不…

分数相加减(C语言)

一、流程图&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>int main() {//初始化变量值&#xff1b;int fenmu 2;int result 1;int fuhao 1;//执行循环&#xff1b;while (fenmu < 100){//运算&#xff1b;fuhao (-1…

TSINGSEE青犀AI智能分析网关V4酿酒厂安全挂网AI检测算法

在酿酒行业中&#xff0c;安全生产一直是企业经营中至关重要的一环。为了确保酒厂生产过程中的安全&#xff0c;TSINGSEE青犀AI智能分析网关V4的安全挂网AI检测算法发挥了重要作用。 TSINGSEE青犀AI智能分析网关V4的安全挂网检测算法是针对酒厂里酒窖挂网行为进行智能检测与识…

[java基础揉碎]Object类详解

目录 equals方法: hashCode: toString: finalize: equals方法: 和equals对比 1.: 既可以判断基本类型&#xff0c;又可以判断引用类型 2.: 如果判断基本类型&#xff0c;判断的是值是否相等。示例: int i10; double d10.0; 3.:如果判断引用类型&#xff0c;判断的是地址是…

SQLiteC/C++接口详细介绍sqlite3_stmt类简介

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLiteC/C接口详细介绍之sqlite3类&#xff08;十八&#xff09; 下一篇&#xff1a;SQLiteC/C接口详细介绍sqlite3_stmt类&#xff08;一&#xff09; 预准备语句对象 typedef struct sqlite3_stmt sqlite3_stmt…
最新文章