BFS 1块、算多少次

目录

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.mzph.cn/web/30042.shtml

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

相关文章

警惕!新增4本SCI/SSCI被剔除!6月WOS更新(附下载)

本周投稿推荐 SSCI • 中科院2区&#xff0c;6.0-7.0&#xff08;录用友好&#xff09; EI • 各领域沾边均可&#xff08;2天录用&#xff09; CNKI • 7天录用-检索&#xff08;急录友好&#xff09; SCI&EI • 4区生物医学类&#xff0c;0.5-1.0&#xff08;录用…

入侵检测系统(IDS)

入侵检测 入侵检测&#xff08;Intrusion Detection&#xff09;是指发现或确定入侵行为存在或出现的动作&#xff0c;也就是发现、跟踪并记录计算机系统或计算机网络中的非授权行为&#xff0c;或发现并调查系统中可能为视图入侵或病毒感染所带来的异常活动。 入侵检测系统 …

neo4j 3.5.5版本创建新的数据库

neo4j 3.5.5版本创建新的数据库 1.找到neo4j的conf文件 点进去 2.点击neo4j.conf 选择记事本打开 3.把graph.db换成自己想要创建的数据库名称 4.打开neo4j服务 出现新的数据库

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败

System.Data.OracleClient.OracleException:“ORA-12571: TNS: 包写入程序失败 解决方法&#xff1a; 首先%oracle_home%/network/admin下的sqlnet.ora文件&#xff0c;把SQLNET.AUTHENTICATION_SERVICES (NTS)加个 # 注释掉就好了

不收费的视频转文字软件有那些?4款视频转文字工具让你效率翻倍!

​视频转文字&#xff0c;也称为视频字幕生成或视频语音识别&#xff0c;是一种将视频中的语音内容转换成文字的技术。视频转文字真的不同的人群所用的工具有所差异&#xff01; 以下是三款免费的在线视频转文字工具推荐&#xff1a; 1&#xff1a;剪映 主要针对人视频制作人…

移植案例与原理 - XTS子系统之应用兼容性测试套件(1)

本文主要通过实例分析下ACTS应用兼容性测试套件移植案例&#xff0c;以及移植过程中特定的操作的原理。主要讲述的是轻量系统兼容性测试。轻量系统因系统能力限制&#xff0c;兼容性测试在系统初始化阶段进行&#xff1b;并且各设备烧录工具存在差异&#xff0c;导致自动化工具…

第二证券股市资讯:昨夜!全球新“股王”诞生

昨晚&#xff0c;英伟达成全球市值榜首公司。 当地时间6月18日&#xff0c;美股三大指数小幅收高&#xff0c;标普500指数与纳指再创前史新高。标普500指数涨0.25%&#xff0c;道指涨0.15%&#xff0c;纳指涨0.03%。 AI热潮推动英伟达大涨&#xff0c;市值逾越微软、苹果&…

【实战】Spring Cloud Stream 3.1+整合Kafka

文章目录 前言新版版本优势实战演示增加maven依赖增加applicaiton.yaml配置新增Kafka通道消费者新增发送消息的接口 实战测试postman发送一个正常的消息postman发送异常消息 前言 之前我们已经整合过Spring Cloud Stream 3.0版本与Kafka、RabbitMQ中间件&#xff0c;简直不要太…

华为鸿蒙 使用router跳转页面 和 router.getParams接收参数并使用参数 [最简单 最直接 的详细教程 ]

1, 准备两个页面 1. pages/DetailPage.ets 2. pages/Index.ets 2, 代码直接 cv 页面 // pages/Index.ets import router from ohos.router// 参数类型 class User {name: stringage: number }Entry Component struct Index {// 要传的参数Stateuser: User {name: John,…

【解决方案】Java 互联网项目中消息通知系统的设计与实现

前言 消息通知系统&#xff08;notification-system&#xff09;作为一个独立的微服务&#xff0c;完整地负责了 App 端内所有消息通知相关的后端功能实现。该系统既需要与文章系统、订单系统、会员系统等相关联&#xff0c;也需要和其它业务系统相关联&#xff0c;是一个偏底层…

docker-compose设置永久启动、自动重启

步骤一 找到 docker-compose.yml 文件 步骤二 vim 打开文件 找到 image: PS&#xff1a;就是为了对齐格式 步骤三 在其下方添加&#xff1a; restart: always而后保存即可

注意力机制简介

为了减少计算复杂度&#xff0c;通过借鉴生物神经网络的一些机制&#xff0c;我们引入了局部连接、权重共享以及汇聚操作来简化神经网络结构。神经网络中可以存储的信息量称为网络容量。一般来讲&#xff0c;利用一组神经元来存储信息的容量和神经元的数量以及网络的复杂度成正…

表面声波滤波器——工艺 (5)

制作工艺流程 声表面波器件制作采用半导体集成电路的平面工艺,首先在压电衬底上通过光刻、镀膜、剥离或刻蚀等工艺制备出叉指换能器&#xff0c;然后经过划片、粘片、压丝、封焊等后续封装工艺得到最后的器件。 整个工艺过程中需要操作使用各种机台 清洗机光刻机涂胶显影台全…

专业和学校到底怎么选,兴趣和知名度到底哪个重要?

前言 2024高考已经落下帷幕&#xff0c;再过不久就到了激动人心的查分和填报志愿的时刻&#xff0c;在那天到来&#xff0c;小伙伴们就要根据自己的分数选取院校和专业&#xff0c;接下来我就以参加22年(破防年)河南高考的大二生来讲述一下我自己对于如何选取院校和专业的看法以…

香港电讯高可用网络助力企业变革金融计算

客户背景 客户是一家金融行业知名的量化私募对冲基金公司&#xff0c;专注于股票、期权、期货、债券等主要投资市场&#xff0c;在量化私募管理深耕多年&#xff0c;目前资管规模已达数百亿级&#xff0c;在国内多个城市均设有办公地点。 客户需求 由于客户业务倚重量化技术…

从“野人饭”走红,探索品牌户外化营销趋势丨小红书内容分析

wildeat&#xff0c;户外是人的天性的回归 近来&#xff0c;“wildeat&#xff08;户外野吃&#xff09;”的风潮在小红书逐渐兴起。越来越多的人选择到户外吃一顿&#xff0c;做一次“野人”&#xff0c;主打一个只要氛围到了&#xff0c;就地开饭&#xff0c;不愁吃什么&…

屏蔽房是做什么用的?为什么需要定期检测?

屏蔽房对于不了解的人来说&#xff0c;可能光看名字不知道是做什么的&#xff0c;但是对于一些企业或者机构&#xff0c;却是再熟悉不过的了。和名字一样&#xff0c;屏蔽房是对空间内的信号以及一些外界环境条件进行隔绝&#xff0c;在一些有特殊要求的企业机构中&#xff0c;…

睿治数据治理平台焕新升级,推出全新建模与调度平台

在数据治理的浩瀚征途中&#xff0c;企业常常面临着数据冗余如同连绵山峦&#xff0c;使得关键信息的获取变得困难重重&#xff1b;在数据检索的海洋中&#xff0c;有时迷失方向&#xff0c;消耗大量时间精力&#xff0c;严重影响了运营效率&#xff1b;特别是在处理大规模数据…

assertJ-db 科普

前言 今日我们看看 java 大名鼎鼎的 assertj 是怎么做断言的 数据库断言 在实际的测试中我们总是跟业务打交道的。跟业务打交道一般很难避免验证数据库中的东西。尤其在接口测试中&#xff0c;一个常见的例子是你测试一个下单的接口。 接口返回可能就是成功过或者失败。你无…

安装 Fedora CoreOS 操作系统

首发日期 2024-06-16, 以下为原文内容: 有一台吃灰几年的 e5-26v3 古老机器, 最近翻出来用一下. 首先从安装操作系统开始. 目录 1 FCOS 简介2 安装过程 2.1 下载 iso 镜像文件并制作安装 U 盘2.2 编写安装配置文件2.3 编译安装配置文件2.4 从 U 盘启动并安装 3 SSH 连接并测试…