BFS 1块、算多少次

news2024/11/17 16:27:51

目录

1.矩阵内部的1块

2.从1开始,+1或乘2,计算要多少次达到n

3.迷宫路径


1.矩阵内部的1块

#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
const int N=130,maxn=101;
int n=2,m=2,k;
int wi[N]={1,2},C[maxn][maxn]={0},inq[maxn][maxn]={0},W[maxn][maxn];
int r[]={0,0,1,-1};
int c[]={1,-1,0,0};
int step=0;int ans=-1;int w0;
struct node
{
	int x,y;
}Node; // node是结构体类别名,Node是结构体的个体的名字 
bool can(int x,int y)
{
	if(x>n || y>m ||x<0 ||y<0) {//printf("1");
	return false;}
	if(inq[x][y] || !W[x][y]) {//printf("2");printf("#%d%d#$%d%d$",x,y,inq[x][y] , !W[x][y]);
	return false;	}
	return true;
}

void bfs(int x,int y)
{
	queue<node> q;
	Node.x=x;Node.y=y;
	q.push(Node);
	inq[x][y]=1;
	while(!q.empty())
	{
		node Node2=q.front();
		q.pop();
		int X=Node2.x;int Y=Node2.y;
for(int j=0;j<4;j++)
		{int nx=X+r[j];int ny=Y+c[j];//printf(">");
		if(can(nx,ny)) 
		{Node.x=nx;Node.y=ny;q.push(Node);inq[nx][ny]=1;//printf("Test%d%dtesT",nx,ny);
		}
		}
		
		
	}
}


int main()
{//D[0][0]=1;
scanf("%d %d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{scanf("%d",&W[i][j]);}
int ans=0;
for(int i=0;i<n;i++)
{for(int j=0;j<m;j++)
{
	if(can(i,j))
	{//printf("^");
	bfs(i,j);ans++;//printf("\n-%d%d-\n",i,j);
	}
}

}
printf("%d",ans);
}

2.从1开始,+1或乘2,计算要多少次达到n

如何记录次数?我选择再开一个queue,

demo, 这个代码超时了

#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
const int N=13,maxn=10;
int n=2,m=2,k;
int wi[N]={1,2},C[maxn][maxn]={0},inq[maxn][maxn]={0},W[maxn][maxn];


int bfs(int n)
{int ans=0;
queue<int> q,q2;
q.push(1);q2.push(ans);
	while(q.front()!=n)
	{
		int a=q.front();int a2=q2.front();//printf(" %d ",a);
		q.pop();a2++;q2.pop();
		q.push(a+1);q2.push(a2);
		q.push(a*2);q2.push(a2);
	}
	return q2.front();
}


int main()
{//D[0][0]=1;
scanf("%d",&n);
//for(int i=0;i<n;i++)
//for(int j=0;j<m;j++)
//{scanf("%d",&W[i][j]);}
//int ans=0;
//for(int i=0;i<n;i++)
//{for(int j=0;j<m;j++)
//{
//	if(can(i,j))
//	{//printf("^");
//	bfs(i,j);ans++;//printf("\n-%d%d-\n",i,j);
//	}
//}
printf("%d",bfs(n));
}


改进:1.没有用一个列表记录不让他重复入队的问题 。

2.如何知道BFS深度?

我用了两个队列,或许这是超时的主要原因),答案是每次记录队列长度,遍历一个队列(同一层·时,在同一个循环里头),循环完了step++

3.        //###这一步很重要 ,我之前写的是for(int i=0;i<q.size();i++),最后算出来结果不对,原因是q.size随着循环在变化,应当在循环结束时更新,而不是一边循环一边更新 

#include <iostream>
#include <vector>
#include <cmath>
#include <string>
#include <cstring>
#include <queue>
using namespace std;
const int N=200000,maxn=10;
int n=2,m=2,k;
//int wi[N]={1,2},C[maxn][maxn]={0},inq[maxn][maxn]={0},W[maxn][maxn];
int hs[N]={0};

int bfs(int n)
{int ans=0;
queue<int> q;//,q2;
q.push(1);//q2.push(ans);
hs[1]=1;
	while(1)
	{
		int cnt=q.size();
		//###这一步很重要 ,我之前写的是for(int i=0;i<q.size();i++),最后算出来结果不对,原因是q.size随着循环在变化,应当在循环结束时更新,而不是一边循环一边更新 
		for(int i=0;i<cnt;i++)
		{//printf("%d ",q.front());
		int a=q.front();//int a2=q2.front();printf(" %d ",a);
		q.pop();//a2++;q2.pop();
		//if(a==n) return ans;
		if(a+1==n || a*2==n) return ans+1;
		//q.push(a+1);q2.push(a2);q.push(a*2);q2.push(a2);
		if(!hs[a+1] && a+1<=n){q.push(a+1);hs[a+1]=1;}//&&前后最好掉一下位置,否则数组要开大一点,不然数组会越界,血与泪的教训。
		if(!hs[a*2] && a*2<=n){q.push(a*2);hs[a*2]=1;}
		}
		
		ans++;
	}
	//return q2.front();
}


int main()
{//D[0][0]=1;
scanf("%d",&n);
//for(int i=0;i<n;i++)
//for(int j=0;j<m;j++)
//{scanf("%d",&W[i][j]);}
//int ans=0;
//for(int i=0;i<n;i++)
//{for(int j=0;j<m;j++)
//{
//	if(can(i,j))
//	{//printf("^");
//	bfs(i,j);ans++;//printf("\n-%d%d-\n",i,j);
//	}
//}
printf("%d",bfs(n));
}


思考:如何记录最佳算法?

类似于这种pre数组,用了运筹学动态规划的思想,全局最优的话,一定局部最优,

比如 如果你是从7到的14,那么,7之前一定是按照“如何到7”的最优方法走的,最后pre数组相当于打表,记录了每一个数字前一个必经之数。

 

具体懒得写了,将在下一个 迷宫路径 中进行具体实现。 

3.迷宫路径

见下一篇

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

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

相关文章

现代谱估计分析信号的功率谱(1)---AR 模型谱估计

本篇文章是博主在通信等领域学习时&#xff0c;用于个人学习、研究或者欣赏使用&#xff0c;并基于博主对通信等领域的一些理解而记录的学习摘录和笔记&#xff0c;若有不当和侵权之处&#xff0c;指出后将会立即改正&#xff0c;还望谅解。文章分类在通信领域笔记&#xff1a;…

1951–2021年欧洲地区木本植物的格网物候数据集

本数据集包含1951–2021年欧洲地区&#xff08;3457′N – 723′N&#xff0c;253′W – 403′E&#xff09;6种木本植物的逐年展叶始期和开花始期格网数据&#xff0c;空间分辨率为0.1&#xff0c;时间分辨率为1天。数据集的质量评估表明&#xff0c;欧洲地区各物种展叶始期和…

车载语音识别系统语音数据采集标注案例

随着人工智能技术的不断发展&#xff0c;其在我们日常生活工作场景中的应用也越来越普及&#xff0c;人工智能技术在不同场景的普及大大的提高了我们日常生活、工作的高效性和便利性。以我们的日常出行为例&#xff0c;车载语音识别系统便是一种典型的人工智能应用场景。 车载…

大咖专栏 | AI 时代下,我们可以拥有怎样的数据库?

Hi&#xff0c;各位朋友们&#xff0c;我是 KaiwuDB 高级架构师赵衎衎。 KaiwuDB 始于万物互联时代下千万条数据洪流中&#xff0c;我们持续打磨构造了更加灵活兼容的分布式多模架构&#xff0c;实现了海量异构数据高性能、低成本的集中管理… …这些底层特性都在为后续提供更…

初见DP

线性DP 例题1 1143. 最长公共子序列 &#xff08;LCS&#xff09; 子序列不连续 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符串的 子序列 是指这样一个新的字符串&#x…

单片机第五季-第八课:STM32CubeMx和FreeRTOS

1&#xff0c;FreeRTOS背景介绍 RTOS简介&#xff1a; 实时操作系统&#xff0c;本用于追求实时性的嵌入式系统&#xff0c;典型&#xff1a;ucos/uclinux/vxworks&#xff1b; 特点&#xff1a;中断响应快、一般可嵌套中断、使用实地址、多任务&#xff1b; &#xff08;实…

如何用Vue3构建一个交互式树状图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 ApexCharts Treemap 组件&#xff1a;可视化多维数据 应用场景 树形图&#xff08;Treemap&#xff09;是一种可视化多维数据的有效方式&#xff0c;特别适用于展示层次结构数据或按类别分组的数据。它…

Flink 资源静态调度

本内容是根据 Flink 1.18.0-Scala_2.12 版本源码梳理而来。本文主要讲述任务提交时&#xff0c;为 Task 分配资源的过程。 以下是具体步骤讲解&#xff1a; TaskManager 资源注册 TaskManager 再启动时&#xff0c;会向 ResourceManager 注册资源。ResourceManager 会将 Tas…

Debian12安装Nvidia官方驱动

1、下载驱动&#xff08;下载到一个英文目录例如你的用户目录/home/用户名下&#xff0c;我下载到dowload目录&#xff0c;由于默认显示中文&#xff0c;在命令行不支持中文显示的是一串数字&#xff0c;当然你仍然可以cd 那串数字进目录&#xff0c;显示有有引号就加引号&…

香港优才计划申请打分、材料、递交攻略,2024年获批后我来分享

香港优才计划这两年很多人弄啊&#xff0c;糖爸作为获批过来人&#xff0c;我来给大家分享香港优才计划申请攻略。 一、香港优才计划如何计算分数&#xff1f; 香港优才计划申请条件分2部分&#xff1a;第一是基本资格要求&#xff0c;第二是计分制度&#xff1b; 基本条件简…

前端框架中的路由(Routing)和前端导航(Front-End Navigation)

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介前端框架中的路由&#xff08;Routing&#xff09;和前端导航&#xff08;Front-End Navigation&#xff09;1. 路由&#xff08;Routing&#xff09;1.1 定义1.2 路由的核心概念1.2.1 路由表&#xff08;Route Table&#xff09;1…

Pentest Muse:一款专为网络安全人员设计的AI助手

关于Pentest Muse Pentest Muse是一款专为网络安全研究人员和渗透测试人员设计和开发的人工智能AI助手&#xff0c;该工具可以帮助渗透测试人员进行头脑风暴、编写Payload、分析代码或执行网络侦查任务。除此之外&#xff0c;Pentest Muse甚至还能够执行命令行代码并以迭代方式…

【信息资源组织与管理】【开卷考】如何准备 期末考试复习必备

索引篇 先去xhs找了开卷考有什么准备技巧&#xff0c;来自Prozac ❗️首先&#xff0c;适用于考试范围为课本内容或者课堂内容&#xff0c;如果有那种拓展题&#xff0c;脱离课本的&#xff0c;那我就没办法了。 ✅一定要熟悉熟悉熟悉课本 1. 第一遍略看课本&#xff0c;可以不…

navcat 随机生成数据

我最近才知道navcat能随机生成数据&#xff0c;所以分享下 下一步&#xff0c;下一步就可以了&#xff0c;我们就成功了

芯片验证分享9 —— 芯片调试

大家好&#xff0c;我是谷公子&#xff0c;之前的课程给大家讲了验证原则、激励设计和代码审查&#xff0c;今天我们来讲芯片调试。 芯片调试是执行一次成功的验证之后要进行的工作。记住&#xff0c;所谓成功的验证&#xff0c;是指它可以证明芯片没有实现预期的功能。调试主…

不是所有洗碗机都能空气除菌 友嘉灵晶空气除菌洗碗机评测

精致的三餐让你以为生活是“享受”&#xff0c;可饭后那些油腻的锅碗瓢盆却成了你我美好生活的最大障碍。想要只吃美食不洗碗&#xff0c;那一台优秀的洗碗机就必不可少了&#xff01;今天&#xff0c;ZOL中关村在线要评测的就是这样一台不光洗得干净更能有效除菌抑菌的洗碗机—…

UE4_材质_湿度着色器及Desaturation算法_ben材质教程

学习笔记&#xff0c;不喜勿喷&#xff01;侵权立删&#xff0c;祝愿美好生活越来越好。 效果图&#xff1a; 原图&#xff1a; 1、使用初学者内容包的材质 我们这里使用虚幻自带的材质M_Brick_Clay_Old,复制一个更名为M_Brickclayoldwet材质。 2、添加去饱和度Desaturation节…

【尝鲜】SpringCloudAlibaba AI 配置使用教程

1、环境配置 maven依赖pom.xml 注意配置远程仓库&#xff0c;原因见&#xff1a;Unresolved dependency: ‘org.springframework.ai:spring-ai-core:jar:0.8.1’ <dependencies><!--Base--><dependency><groupId>org.springframework.boot</group…

【Spine学习14】之 裁剪

1、新建裁剪 2、在页面中随便点几下 圈出对应位置 3、点编辑裁剪 或者按空格键 退出编辑模式&#xff0c; 页面就只剩下对应区域&#xff0c;这个区域可以任意拖动 放大缩小显示。 tips&#xff1a; 如果手动选择区域描绘不准确&#xff0c;可以启用对应图片的网格 然后复制…

SSM小区车辆信息管理系统-计算机毕业设计源码06111

摘 要 科技进步的飞速发展引起人们日常生活的巨大变化&#xff0c;电子信息技术的飞速发展使得电子信息技术的各个领域的应用水平得到普及和应用。信息时代的到来已成为不可阻挡的时尚潮流&#xff0c;人类发展的历史正进入一个新时代。在现实运用中&#xff0c;应用软件的工作…