每日总结2022.12.27
今日仍再熟悉dfs,对递归不够熟悉。希望通过dfs来加深对递归的理解。要理解递归,最好还是在纸上打草稿,不然进入递归和return很容易把自己绕晕。
例题:自然数的拆分问题https://www.luogu.com.cn/problem/P2404
题目描述
任何一个大于 11 的自然数 n,总可以拆分成若干个小于 n 的自然数之和。现在给你一个自然数 n,要求你求出 n 的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。
输入格式
输入:待拆分的自然数 n。
输出格式
输出:若干数的加法式子。
输入输出样例
输入
7
输出
1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4
思路:这题实际上就是:给定一个n,然后输出所有加起来等于n的自然数。做这道题不能简单的从拆分入手,题目要求按照字典序的顺序输出。那么就从1开始,再到n。
当i=1时,ans第一个赋值为1,进入递归函数,直到进入最后一个的递归函数时,ans有7个1,输出。然后离开最后一个递归函数,回到倒数第2个递归,刚刚7个自然数和为n的情况已经输出完了,现在我们要来找6个自然数和为n的情况,在倒数第2个递归函数中,i=2,ans中第6个位置变为2,进入递归,判断和为n,输出。。。
上代码
#include<stdio.h>
int ans[10];void print(int t)
{for(int i=1;i<t-1;i++){printf("%d+",ans[i]);}printf("%d\n",ans[t-1]);
}
void dfs(int n,int t)//n为剩余的数,即ans[t]的后缀和
{if(n==0&&t>2)//ans的和达到了要求,可以输出{print(t);return;}for(int i=1;i<=n;i++)//从1开始{if(i>=ans[t-1])//确保序列中为升序 {ans[t]=i;dfs(n-i,t+1);//a[t]为i,那么它的后面的数的和只能是n-i }}return;
}int main()
{int n;scanf("%d",&n);dfs(n,1);return 0;
}
在做这道题的时候,我进入了误区,单纯地把n拆分,一个数拆成俩个,两个变3。这一错误也可以靠dfs实现,与上面那道代码些许相似
//#include<stdio.h>
//int ans[10];
//
//void print(int t)
//{
// for(int i=1;i<=t;i++)
// {
// printf("%d+",ans[i]);
// }
// printf("%d\n",ans[t+1]);
//}
//void dfs(int n,int t)
//{
// if(n==1) return;
// for(int i=1;i<=n/2;i++)//把一个数拆开,最多拆到一半左右
// {
// if(i>=ans[t-1])//确保升序
// {
// n=n-i;//拆分为n-i与i
// ans[t]=i;
// ans[t+1]=n;
// print(t);
// dfs(n,t+1);
// n=n+i;
// }
// }
// return;
//}
//
//int main()
//{
// int n;
// scanf("%d",&n);
// dfs(n,1);
// return 0;
//}
例题:填涂颜色https://www.luogu.com.cn/problem/P2404
题目描述
由数字 00 组成的方阵中,有一任意形状闭合圈,闭合圈由数字 1构成,围圈时只走上下左右 4个方向。现要求把闭合圈内的所有空间都填写成 2。例如:6×6 的方阵(n=6),涂色前和涂色后的方阵如下:
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
输入格式
每组测试数据第一行一个整数 n(1≤n≤30)。
接下来 n 行,由 0和 1 组成的 n×n 的方阵。
方阵内只有一个闭合圈,圈内至少有一个 00。
输出格式
已经填好数字 22 的完整方阵。
输入输出样例
输入 #1复制
6
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 0 0 1
1 1 0 0 0 1
1 0 0 0 0 1
1 1 1 1 1 1
输出 #1复制
0 0 0 0 0 0
0 0 1 1 1 1
0 1 1 2 2 1
1 1 2 2 2 1
1 2 2 2 2 1
1 1 1 1 1 1
说明/提示
对于 100\%100% 的数据,1≤n≤30。
思路:这道题很简单,和迷宫十分相似,迷宫只要走到终点,这里就相当于把迷宫走完,把迷宫的每个地方都走一遍。把走过的地方全部变成2,最后在变回来就可以了。就不多赘述了。
#include<stdio.h>
int circle[32][32];
int n;
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
void dfs(int x,int y)
{if(circle[x][y]==1){return;}int tx,ty;for(int i=0;i<4;i++){tx=x+dx[i];ty=y+dy[i];if(tx<=n+1&&tx>=0&&ty<=n+1&&ty>=0){if(circle[tx][ty]==0){circle[tx][ty]=2; dfs(tx,ty);}}}return;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&circle[i][j]);}}dfs(0,0);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(circle[i][j]==2){circle[i][j]=0;}else if(circle[i][j]==0){circle[i][j]=2;}printf("%d ",circle[i][j]);}printf("\n");}return 0;
}
每日总结2022.12.27相关推荐
- English Learning - Day21 作业打卡 2022.12.27 周二
English Learning - Day21 作业打卡 2022.12.27 周二 引言 一.给出如下短语的汉语释义 1. vanished youth 2. faded flowers 3. o ...
- chrome浏览器抓包工具介绍(2022,12,27)
1.elements 的作用 展示这个浏览器看到的这个网页的源代码.通过elements,比如要在这个网页爬虫,从源代码里面提取信息,要知道规则,在网页里面点击要提取的元素,源代码里面会蓝色底的显示出 ...
- AWVS安装与使用(最新版2022.12.27更新)
AWVS安装与使用 1.AWVS 1.1.AWVS介绍 1.2.AWVS下载 2.AWVS安装 2.1.AWVS安装流程 2.1.1.运行安装 2.1.2.安装位置 2.1.3.设置账号密码 2.1. ...
- 2022.12.27号笔记 解决 npm run serve 项目起不来问题 解决 npm run serve 项目起不来问题
1 解决 npm run serve 项目起不来问题 按快捷键 ctrl+` 即可打开终端子窗口,如下图所示 2 svn拉下的代码 是压缩好的如何处理 3.前端 项目如何在文件夹 中直接打开vscod ...
- 海康前端实习日记-2022.12月
背景:框架是vue2,刚开始安排了一些缺陷单让你解决,后面就会分一些需求让你开发了.我是第一天装环境,第二天就开始解决缺陷了,第三周就开始开发需求啦 目录 2022.12.6 2022.12.7 20 ...
- 2022.12.5-12.11 AI行业周刊(第127期):一起做时间的朋友
最近沸沸扬扬的就是核酸疫情的事情,突然之间,一下子全国都放开了,很不适应. 大宝在上幼儿园中班,上上个星期,学校的政策,还是没有核酸证明不得入校. 而上周末发的通知,已经是不得在外做核酸,只能到学校做 ...
- English Learning - Day3 作业打卡 2022.12.9 周五
English Learning - Day3 作业打卡 2022.12.9 周五 引言 1. 这消息使她非常悲伤. 2. 他儿子要什么,他给什么. 3. 你能多给我一张票吗? 4. 事情不要做一半就 ...
- Hibiscus的脑机接口学习周报(2022/12/26~2022/1/1)
2022/12/26(星期一) 在学习使用python mne库读取.set类型数据时,遇到了类似如下报错:buffer is too small (来源于Python读取.set格式的脑电数据出现b ...
- 【总结】包和模块(2022.4.27)
[总结]包和模块(2022.4.27) 1.模块 1.1 模块是什么 python中一个py文件就是一个模块 1.2 如何在模块中使用另一个模块的内容 1)前提:被使用的模块的模块名(py文件的文件名 ...
最新文章
- 全差分放大器——共模的意义
- java 套接字 访问tcp_Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
- Java 拷贝,你能说出个 123 么?
- 解决Eclipse Pydev中import时报错:Unresolved import
- pytorch learning
- openDrive has Free Direct Linking !
- Ubuntu18.04 如何解决编译objective-c出现undefined reference to objc_get_class
- ASP类计算机专业毕业设计题目
- 微博音视频下载与合并
- 图论专题HDU-1869 六度分离
- C语言只用int这一种数据类型实现用拼音念数字
- 003-photoshop快速去掉图片背景颜色、签名放到指定文档合成图片
- openOCD的使用1: 应用openOCD和Jlink仿真器连接Freescale K60系列 MCU
- GPFS各类排故日志收集汇总
- HDU 1208 Pascal‘s Travels
- 移动应用市场爆炸性增长
- linux电脑滚轮不能用,鼠标滚轮不能用,小编教你电脑鼠标滚轮不能用怎么办
- ASP.NET编写简单的中文分词程序
- 计算式二级python_python实现自动生成小学四则运算题目(软工第二次项目作业)...
- 为什么总是标准正交基(标准直角坐标系)?
热门文章
- 处理器哪个好_a14处理器和骁龙865哪个好 a14处理器和骁龙865区别对比_CPU_硬件教程...
- Python字符与ASCII码的相互转换函数
- 中标麒麟系统安装 chrome浏览器记录
- javaScript读取页面表格中每个单元到EXCEL中
- android恢复出厂设置广播,如何恢复出厂设置您的Android TV | MOS86
- liunx7.9安装mysql8.0.29操作流程说明
- 大家都是怎么样去做销售的
- Altium designer 的放大镜打开和关闭
- 自定义view画走势图(一)
- 计蒜客-1884-奶牛晒衣服(priority_queue)