洛谷 P2040 打开所有的灯-dfs

题目背景
pmshz在玩一个益(ruo)智(zhi)的小游戏,目的是打开九盏灯所有的灯,这样的游戏难倒了pmshz。。。

题目描述
这个灯很奇(fan)怪(ren),点一下就会将这个灯和其周围四盏灯的开关状态全部改变。现在你的任务就是就是告诉pmshz要全部打开这些灯。

例如

0 1 1
1 0 0
1 0 1
点一下最中间的灯【2,2】就变成了

0 0 1
0 1 1
1 1 1
再点一下左上角的灯【1,1】就变成了

1 1 1
1 1 1
1 1 1
达成目标。最少需要2步。

输出2即可。

输入格式
九个数字,3*3的格式输入,每两个数字中间只有一个空格,表示灯初始的开关状态。(0表示关,1表示开)

输出格式
1个整数,表示最少打开所有灯所需要的步数。

输入输出样例
输入
0 1 1
1 0 0
1 0 1
输出
2

代码如下:

#include <iostream>
using namespace std;
const int N = 5;
int g[N][N];
int ans = 10;
void turn(int x,int y)//开关灯
{g[x][y] = 1-g[x][y];g[x-1][y] = 1-g[x-1][y];g[x+1][y] = 1-g[x+1][y];g[x][y+1] = 1-g[x][y+1];g[x][y-1] = 1-g[x][y-1];
}void dfs(int n)
{if (n > ans) return ;//剪枝,不剪枝会超时//超过最小的次数就返回,初始次数为10,规律:它总共步骤不会超过9次int sum = 0;for (int i = 1;i<=3;i++)for (int j = 1;j<=3;j++)sum+=g[i][j];if (sum==9) ans = min(ans,n-1);//加起来等于9,就是灯全部亮的情况for (int i = 1;i<=3;i++)for (int j = 1;j<=3;j++){turn(i,j);dfs(n+1);turn(i,j);}
}int main()
{for (int i = 1;i<=3;i++)for (int j = 1;j<=3;j++)cin>>g[i][j];dfs(1);cout<<ans<<endl;return 0;
}

增加一个标记数组,剪枝。

代码如下:

#include <iostream>
using namespace std;
const int N = 5;
int g[N][N];
int ans = 10;
bool vis[N][N];void turn(int x, int y) { //开关灯g[x][y] = 1 - g[x][y];g[x - 1][y] = 1 - g[x - 1][y];g[x + 1][y] = 1 - g[x + 1][y];g[x][y + 1] = 1 - g[x][y + 1];g[x][y - 1] = 1 - g[x][y - 1];
}void dfs(int n) {if (n > ans)return ;//剪枝,不剪枝会超时//超过最小的次数就返回,初始次数为10,规律:它总共步骤不会超过9次int sum = 0;for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++)sum += g[i][j];if (sum == 9)ans = min(ans, n - 1); //加起来等于9,就是灯全部亮的情况for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++) {if (!vis[i][j]) {vis[i][j] = true;turn(i, j);dfs(n + 1);vis[i][j] = false;turn(i, j);}}
}int main() {for (int i = 1; i <= 3; i++)for (int j = 1; j <= 3; j++)cin >> g[i][j];dfs(1);cout << ans << endl;return 0;
}

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

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

相关文章

icoding复习4 数组 十字链表

icoding 复习4 1. 矩阵加法 实现三元组表示的两个稀疏矩阵的加法。 #define MAXSIZE 100 //假设非零元个数的最大值为100 typedef struct { int i,j; //非零元的行下标和列下标&#xff0c;i 和 j 从 1 开始计数&#xff0c;与数学中矩阵元素的…

【译】来看看WebWindow,一个跨平台的.NET Core webview 库

本文翻译自 ASP.NET 项目组的 Steve Sanderson 的博客&#xff0c;发表于 2019 年 11 月 18 日。Steve Sanderson 是 Blazor 最早的创造者。它类似于 Electron&#xff0c;但没有捆绑 Node.js 和 Chromium&#xff0c;也没有大部分 API。我的上一篇文章研究了如何用 web 渲染的…

sql if 和insert_拼多多面试:Mybatis是如何实现SQL语句复用功能的?

在工作中&#xff0c;往往有这样的需求&#xff0c;对于同一个sql条件查询&#xff0c;首先需要统计记录条数&#xff0c;用以计算pageCount&#xff0c;然后再对结果进行分页查询显示&#xff0c;看下面一个例子。<sql id"studentProperties"><!--sql片段-…

上元节的灯会(亮)-dfs

题目背景 上元佳节&#xff0c;庙会里举办着各式各样的庆典活动&#xff0c;牛宝也兴奋地参与其中。突然&#xff0c;他被一个新颖的点灯游戏所吸引&#xff0c;游戏要求最终点亮所有在场的花灯&#xff0c;每盏灯都有开关两种状态&#xff0c;每一次点击在场的一盏任意状态的花…

代码演示C#各版本新功能

代码演示C#各版本新功能C#各版本新功能其实都能在官网搜到&#xff0c;但很少有人整理在一起&#xff0c;并通过非常简短的代码将每个新特性演示出来。代码演示C#各版本新功能C# 2.0版 - 2005泛型分部类型匿名方法可以为null的值类型迭代器协变和逆变C# 3.0版 - 2007自动实现的…

icoding复习5 树 感觉难度巨大....

icoding 复习5 1. 先序遍历 已知二叉树按照二叉链表方式存储&#xff0c;利用栈的基本操作写出先序遍历非递归形式的算法&#xff1a; void pre_order(BiTree root); 二叉树的相关定义如下&#xff1a; typedef int DataType; typedef struct Node{ DataType data; …

python 进行一元线性回归并输出相关结果_Python实现一元线性回归实战

回归是一种有监督的学习方式&#xff0c;需要根据历史数据对未知数据做出预测。在此&#xff0c;以房屋面积预测房屋价格为例&#xff1a;首先&#xff0c;读入数据&#xff1a;代码如下&#xff1a;import pandas as pdimport numpy as npfrom io import StringIOfrom sklearn…

《C++ Primer》第一章的 Sales_item.h头文件源码

Sales_item.h不是C自带的&#xff0c;需要自己安装&#xff0c;这个库作者已经写好了, Sales_item.h 头文件代码如下&#xff1a; #ifndef SALESITEM_H #define SALESITEM_H #include <iostream> #include <string>class Sales_item{ public:Sales_item(const std…

icoding复习7, 8

icoding复习7 哈希,AVL 查找 必考点!!! 1. 哈希表创建 typedef enum{ HASH_OK, HASH_ERROR, HASH_ADDED, HASH_REPLACED_VALUE, HASH_ALREADY_ADDED, HASH_DELETED, HASH_NOT_FOUND, } HASH_RESULT; typedef struct __HashEntry HashEntry; struc…

python加载模型包占用内存多大_加载pickle python对象会占用大量内存

我有一个python的pickle对象,它生成一个180 Mb的文件.当我取消它时,内存使用量会爆炸到2或3Gb.你有类似的经历吗&#xff1f;这是正常的吗&#xff1f;对象是包含字典的树&#xff1a;每个边是一个字母,每个节点都是一个潜在的单词.因此,要存储一个单词,您需要的边数与该单词的…

《C++ Primer》1.52节练习

练习1.23 #include <iostream> #include "Sales_item.h"using namespace std;int main() {Sales_item trans1, trans2;cout << "请输入若干销售记录:" << endl;if (cin >> trans1) {int num 1;while (cin >> trans2)if (t…

ASP.NET Core 反向代理部署知多少

引言最近在折腾统一认证中心&#xff0c;看到开源项目[IdentityServer4.Admin&#xff1a;https://github.com/skoruba/IdentityServer4.Admin]集成了IdentityServer4和管理面板&#xff0c;就直接拿过来用了。在尝试Nginx部署时遇到了诸如虚拟目录映射&#xff0c;请求头超长、…

函数传参string_JavaScript 高阶函数入门浅析

原文&#xff1a;https://www.freecodecamp.org/news/a-quick-intro-to-higher-order-functions-in-javascript-1a014f89c6b/译者&#xff1a;jingruzhang校对者&#xff1a;acusp高阶函数高阶函数可以接收函数作为参数&#xff0c;同时也可以返回一个新的函数。高阶函数之所以…

all()与any()

all():当可迭代对象为空时返回True。或者当可迭代对象中是否所有值都为True&#xff0c;所有值都为True,则返回True。否则返回False。any():当可迭代对象为空时返回False。或者当可迭代对象中是否存在一个为True的值&#xff0c;若存在&#xff0c;返回True,否则返回False 示例…

.NET Core开发实战(第13课:配置绑定:使用强类型对象承载配置数据)--学习笔记...

13 | 配置绑定&#xff1a;使用强类型对象承载配置数据要点&#xff1a;1、支持将配置值绑定到已有对象2、支持将配置值绑定到私有属性上继续使用上一节代码首先定义一个类作为接收配置的实例class Config {public string Key1 { get; set; }public bool Key5 { get; set; }pub…

Python--第3次平时作业

目录 一、单项选择题 二、程序填空题 三、所有测试代码如下: 一、单项选择题 题号 1 2 3 4 5 6 7 8 9 10 答案 C A A C C D D D D C 题号 11 12 13 14 15 16 17 18 19 20 答案 A A C C B C A C B A 题号 21 22 23 24 25 …

工业互联网白皮书_发布|《工业互联网平台安全白皮书(2020)》发布

12月4日&#xff0c;2020年中国工业信息安全大会暨全国工控安全深度行(京津冀站)在北京国际会议中心举行。大会由国家工业信息安全发展研究中心、工业信息安全产业发展联盟主办&#xff0c;以“贯彻总体国家安全观&#xff0c;把牢工控安全基准线”为主题。会上&#xff0c;国家…

UVA - 514 Rails-栈

某城市有一个火车站&#xff0c;铁轨铺设如图6-1所示。 有n节车厢从A方向驶入车站&#xff0c;按进站顺 序编号为1&#xff5e;n。 你的任务是判断是否能让它们按照某种特定的顺序进入B方向的铁轨并驶出 车站。 例如&#xff0c;出栈顺序(5 4 1 2 3)是不可能的&#xff0c;但(5…

全局思维

在这个复杂多变的时代&#xff0c;是时候提升我们的思维了&#xff0c;树立大局意识&#xff0c;在把握空间纵轴线和时间水平线中思考和谋划大局。全局思维能力&#xff0c;蕴含着从全局的、长远的、战略的高度来分析问题和解决问题的能力&#xff1b;是善于从大处着眼、小处着…