【洛谷P2622】关灯问题II【BFS】【状压】

开灯关灯问题的两种解决方式(数学建模线性代数的应用和编程实现) 开灯关灯问题的两种解决方式 1.问题介绍 2.编程实现算法及其代码(详细) 3.就该题进行数学建模–体验线性代数的使用 1.问题介绍 有一个按钮组成的矩阵,其中每行有5个按钮,共5行。每个按钮旁边有一盏灯。当按下一个按钮,该按钮及其上下左右四个按钮控制的灯都会发生状态改变,即,如果灯原来是熄灭的,就会被点亮;如果灯原来是点亮的,就会被熄灭。(在矩阵角上的按钮会改变3盏灯的状)请写一个程序确定需要按下那些按钮,恰好使得所有灯都熄灭。 2.编程实现算法及其代码(详细) 1.解题思路 对于第一行每盏点亮的灯,按 阅读详情

题目大意:

题目链接:https://www.luogu.org/problemnew/show/P2622
有 m m m个开关和 n n n盏灯,第 i i i个开关要么可以开启第 j j j盏灯,要么可以关上第 j j j盏灯,要么不对第 j j j盏灯起作用。求把 n n n盏灯全部打开的最少步数。


思路:

这道题很明显可以用 B F S BFS BFS做。因为对于每一种情况,我们也就只有 m m m种转移方法,而求的是最优解。
而最多只有10盏灯,所以可以想到用状压。这样每种情况就被压缩成了 0 0 0~ 1023 1023 1023中的一个数。
那么搜就好了。
注意细节。


代码:

#include <cstdio>
#include <queue>
using namespace std;

int n,m,a[101][11];
bool p[1024];

int change(int x,int y)  //转换
{
	for (int i=1;i<=n;i++)
	{
		if (a[y][i]==1) x|=(1<<(n-i)); 
	    //如果这个开关可以打开这盏灯,那么就直接或,因为1 or 1=0 or 1=1
		if (a[y][i]==-1&&(x&(1<<(n-i)))) x^=(1<<(n-i));
		//如果这个开关可以关上这盏灯,那么就要判断这一位是不是1,如果是1才异或。
	}
	return x;
}

void bfs()
{
	queue<int> dis;  //最小步数
	queue<int> q;  //状态(已压缩)
	q.push(0);
	dis.push(0);
	while (q.size())
	{
		int u=q.front();
		int d=dis.front();
		q.pop();
		dis.pop();
		for (int i=1;i<=m;i++)  //美剧每一个开关
		{
			int v=change(u,i);
			if (p[v]) continue;  //判重
			p[v]=1;
			q.push(v);
			dis.push(d+1);
			if (v==(1<<n)-1)  //全部打开
			{
				printf("%d\n",d+1);
				return;
			}
		}
	}
	printf("-1");
	return;
}

int main()
{
	scanf("%d%d",&n,&m);
	for (int i=1;i<=m;i++)
	 for (int j=1;j<=n;j++)
	  scanf("%d",&a[i][j]);
	bfs();
	return 0;
}
洛谷 P2622 关灯问题II (状态压缩动态规划) P2622 关灯问题II 题意 给定n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯,按下了第i个按钮,对于所有的灯都会有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,当这盏灯是关的,把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按... 阅读详情

相关推荐

Obsidian与GPT协作:数学公式从KaTeX到MathJax的无缝转换实践

本文针对Obsidian用户从GPT等AI助手复制数学公式时遇到的KaTeX与MathJax格式不兼容问题,提供了高效的解决方案。重点介绍了KaTeX to MathJax插件的核心作用,它能自动将AI生成的KaTeX格式公式(如\(...\))无缝转换为Obsidian默认支持的MathJax格式($...$),实现复制粘贴后公式即时渲染,极大提升了数学笔记与AI协作的效率和流畅度。

weixin_29209825的博客 134

【洛谷 2622】 关灯问题II【状态压缩】

题目描述 现有nnn盏灯,以及mmm个按钮。每个按钮可以同时控制这nnn盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]a[i][j]a[i][j]为111,那么当这盏灯开了的时候,把它关上,否则不管;如果为-111的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。 输入格式 前两行两个数,n,mn,mn,m 接下来mm

在人间贩卖声音 185

AI视频生成提示词工程:结构化公式与实战案例详解

在实际使用 AI 生成视频或图像时,最常遇到的困惑是:为什么我的提示词(Prompt)生成的画面总是不理想?是模型能力不足,还是我的描述有问题?答案往往是后者。提示词工程(Prompt Engineering)并非简单的“翻译”需求,而是一门需要结构化思维和精准描述的技能。它决定了 AI 能否准确理解你的意图,并生成符合预期的视觉内容。 本文将通过两个核心案例,深入拆解提示词的构建逻辑。第一个案例聚焦于“文生视频”,我们将学习如何将一个简单的想法,如“小猫在雪地里玩雪球”,通过结构化公式扩展为一段富有细节和

weixin_30800987的博客 555

关灯问题(数学问题,因子解决)

关灯问题 问题1: 大厅里有100盏灯,每盏灯都编了号码,分别为1-100。每盏灯由一个开关来控制。(开关按一下,灯亮,再按一下灯灭。开关的编号与被控制的灯相同。)开始时,灯是全灭的。现在按照以下规则按动开关。 第一次,将所有的灯点亮。 第二次,将所有2的倍数的开关按一下。 第三次,将所有3的倍数的开关按一下。 以此类推。第N次,将所有N的倍数的开关按一下。 问第100次按完

璐璐的专栏 5057

从PWM到正弦波:RC低通滤波器的魔法转换之旅

本文详细介绍了如何利用RC低通滤波器将STM32F103生成的PWM信号转换为高质量正弦波的技术原理与实践方法。通过分析滤波器设计、参数计算、硬件实现及Proteus仿真验证,为嵌入式开发者提供了一套完整的PWM转正弦波解决方案,适用于电机控制、音频信号生成等多种应用场景。

jupi8的博客 380

【脚本篇】---spyglass lint脚本

【代码】【脚本篇】---spyglass lint脚本。

冬瓜 6355

P2622 关灯问题II - 二进制状压

P2622 关灯问题II ^ :按位运算符  异或 0 ^ 1 得 1  1 ^ 1 得 0   0 ^ 0 得 0 1 ^ 0 得 1同为0异为1 | :当|和||的两端表达式同时为假时 &lt;&lt; :空缺补0,被移除的高位丢弃,空缺位补0,比如32位二进制 0000....00011左移3位变成了0...00011xxx,则xxx补足000即可。规律左移是基数乘以2的移位幂次方, ...

BePosit的博客 642

23数字图像置乱技术(matlab程序)

所谓“置乱”,就是将图像的信息次序打乱,a像素移动到b像素位置上,b像素移动到c像素位置上,……,使其变换成杂乱无章难以辨认的图片。数字图像置乱技术属于加密技术,是指发送发借助数学或者其他领域的技术,对一幅有意义的数字图像做变换,使之变成一幅杂乱无章的图像用于传输。在图像传输过程中,它通过对图像像素矩阵的重排,破坏了图像矩阵的相关性,使非法截获者无法从杂乱无章的图像中获得原图像信息,以此实现信息的加密。接收方经去乱解密可恢复原图像。

m0_57943157的博客 1204

【题解】P2622 关灯问题II

现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。一个整数,表示最少按按钮次数。的话,如果这盏灯是关的,那么把它打开,否则也不管;,那么当这盏灯开了的时候,把它关上,否则不管;然后暴力枚举当前状态按下第几个开关后的状态。个按钮,对于所有的灯都有一个效果。的大小并不确定,无法保证DP条件中的。考虑用宽搜,存的状态为当前灯的状态。其中,按下每个开关,对于其对第。,无论这灯是否开,都不管。,那按完后这个灯一定关着。,那按完后这个灯一定开着。串来表示灯的开关状态,

conti123的博客 2588

【TC3xx芯片】TC3xx芯片STM介绍

TC3xx芯片STM介绍

qq_36056498的博客 2280

11年电赛综合测评——单运放三角波发生器

目录 背景知识科普: 原理:局部负反馈+大环负反馈+积分器 仿真图如下: 背景知识科普: 反馈电路是将放大器输出信号(电压或电流)的一部分或全部,回收到放大器输入端与输入信号进行比较(相加或相减),并用比较所得的有效输入信号去控制输出,这就是放大器的反馈过程。 一、反馈放大器反馈极性的经验分析法—符号法 分析步骤1.在输入端上加上一个“+”或“-”的输入信号,按瞬时极性法标出反馈放大器中各个电极(基极b,集电极c,发射极e)电压的瞬时性。 2.判断经放大和反馈后得到的反馈信号Xf的瞬时极性

沉迷单车的追风少年 9905

洛谷P2622 关灯问题II【状压dp+bfs】

P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求...

C++的星空 507

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

洛谷 P2622 关灯问题II (状压bfs)

P2622 关灯问题II luogu链接 题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有...

October の 补题记录 246

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

洛谷-P2622 关灯问题II(BFS+状压)

P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求...

紫藤&code的博客 304

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

洛谷P2622 关灯问题II【状压bfs】

分析:对状态进行bfs转移,剪枝掉出现过的状态; #include<bits/stdc++.h> using namespace std; int n,m; int a[110][20]; map<int,int> vis; struct node{int cd,num;}; queue<node> Q; int bfs() { node cur={...

MaJorieL 185

算法:状压dp 洛谷 状态压缩动态规划 P2622 关灯问题 II

思路:通过观察发现n最大为10,可以用状压把灯的状态用二进制表示,0就是关1就是开,然后用bfs去爆搜,并且用dp数组记忆这个状态有没有来过并且记录其最小步数,如果发现dp[0]为0说明无法达到,输出-1,否则输出答案。

2502_90699592的博客 744

洛谷 P2622 关灯问题 II 题解

对于本题,首先我们建立button数组用于存储按钮信息,然后状态则是使用二进制压缩,第i位如果是1,就意味着这个灯打开着,如果为0,则说明此灯关着。(1011表示第4,2,1盏灯亮着)分析题意,我们可以发现只有按钮是1,和-1的情况下需要进行变换操作,并且在操作时需要判断一下,是否满足操作条件。本题其实不能算严格意义上的状压dp,更应该说是状态压缩加bfs。为什么不能使用dp就是因为这道题正常情况下无法保证无后效性。最后使用bfs搜索答案即可。

2302_80063488的博客 309

洛谷___P2622 关灯问题II + P3959 宝藏 —— 状压dp

题目链接:P2622 关灯问题II╭(╯^╰)╮ 题目大意:      现有 nnn 盏灯,以及 mmm 个按钮。每个按钮可以同时控制这 nnn 盏灯—— 按下了第 iii 个按钮,对于所有的灯都有一个效果。按下i按钮对于第 jjj 盏灯,是下面 3 种效果之一:如果 a[i][j]a[i][j]a[i][j] 为 111,那么当这盏灯开了的时候,把它关上,...

Scar_Halo 315

洛谷 P2622 关灯问题II

P2622 关灯问题II 题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求...

轻船的博客 329

【洛谷_P2622】关灯问题II

关灯问题II 题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下 i 按钮对于第j盏灯,是下面3中效果之一:如果 a[i][j] 为 1 ,那么当这盏灯开了的时候,把它关上,否则不管;如果为 -1 的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是 0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。 输入格式 前两行两个数,n m 接下来m行,每行n个数,a[i][j]

你...你不要过来啊!!! 307

洛谷P2622关灯问题II(状压)

题目描述 现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果a[i][j]为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为-1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。 现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部...

weixin_30786657的博客 135

洛谷 - P2622 关灯问题II (状态压缩,BFS)

现有n盏灯,以及m个按钮。每个按钮可以同时控制这n盏灯——按下了第i个按钮,对于所有的灯都有一个效果。按下i按钮对于第j盏灯,是下面3中效果之一:如果aij​为1,那么当这盏灯开了的时候,把它关上,否则不管;如果为−1的话,如果这盏灯是关的,那么把它打开,否则也不管;如果是0,无论这灯是否开,都不管。现在这些灯都是开的,给出所有开关对所有灯的控制效果,求问最少要按几下按钮才能全部关掉。

2302_79440616的博客 934

20251019状压DP总结

首先题目告诉我们有n盏灯,每盏灯可以是开或者关,有几个按钮,每个按钮按下之后可以使每盏灯开或者关,求最开始每盏灯都是开的,最少按几次按钮才能使所有等关上,如果无法实现就输出-1。这几个数的状态可以看作一个二进制数,每一个数的状态随之对应二进制数的每一个数位,那么每一种这几个数的不同状态组合随之对应一个二进制数。有时,仅仅只是有时,题目会让你求关于几个数从一个状态到另一个状态相关问题,那么弄一个。显然,这题bfs就能水过,但是有关状态压缩,所以值得一讲。的数组显然是不现实的,所以状压DP由此诞生。

scx20131004的博客 373

P2622 关灯问题II(状态压缩 搜索)

关灯问题II - 洛谷https://www.luogu.com.cn/problem/P2622状态压缩的一个学习案例,一道很经典的题目。

Ghostttttttiii的博客 177
上一篇: 【洛谷P4281】紧急集合 / 聚会【LCA】
下一篇: 【洛谷P1063】能量项链【区间DP】
stoorz1023
博客等级 码龄9年 101粉丝 595原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值