dfs初步模板解析
2024-10-10 09:34:30
#include<stdio.h>
int a[10],book[10],n;
//这里还有需要注意的地方C语言全局变量默认为0 void dfs(int step){ //此时在第step盒子面前,需要往里面放第i张扑克牌
int i;
if(step==n+1){ //这里说明前面的n个盒子已经放好了,这是dfs结束的标志
for(i=1;i<=n;i++)
printf("%d",a[i]);
printf("\n"); return ;
/*
注意这个 return 它的作用不是返回主函数,而是返回上一级的dfs函数 例:如果此时是 dfs(5),遇到这个 return 就会回到上一级的 dfs函数
也就是dfs(4),但此时dfs(4)的大部分语句已经执行了,只需要接着执行 book[i]=0
然后继续进入for循环进入下一次的 dfs函数,直到结束。
*/ }
for(int i=1;i<=n;i++){
if(book[i]==0){ //说明i号扑克牌还在手里,需要放入step号盒子
a[step]=i;//将i号扑克牌放到第step个盒子中
book[i]=1;//此时i号扑克牌已经被使用
dfs(step+1);
/*注意这里是自己调用自己,表示此时走到了第step+1个盒子面前*/
book[i]=0;
/*book[i]=0表示dfs调用结束了,换句话说就是扑克牌已经全部放完了
需要按照顺序将扑克牌收回,重新放,也就是前面所说的
*/
}
}
return;//这里表示这一级别的dfs函数已经结束了,返回上一级 dfs函数 }
int main(){
scanf("%d",&n);
dfs(1); //dfs函数的开始
return 0;
}
最新文章
- centos6字符
- MAC显示文件夹路径
- linux 排序命令sort
- swifter技巧(100)
- select case when
- POJ C程序设计进阶 编程题#3: 发票统计
- BZOJ 1191: [HNOI2006]超级英雄Hero 二分匹配
- python-集合(第二篇(七):集合)
- http缓存与cdn相关技术
- Linux 显示权限
- 使用redis构建文章投票系统
- FFmpeg and x264 Encoding Guide
- POJ3094 Quicksum
- InfluxDB服务器启动流程
- vue路由传参的三种基本方式
- 把svn上的mycelipse导到本地的eclipse中【原】
- 深入理解 RecyclerView 系列之:ItemDecoration
- matplotlib画堆叠条形图
- 使用RecyclerView打造Gallery
- Structs复习 OGNL