dfs 递归思想 解决排列组合的一些基础问题
来源:互联网 发布:淘宝真实收货地址大全 编辑:程序博客网 时间:2024/06/05 08:37
对于搜索的深度很深或深度不固定的情况,则无法用枚举的方法来设置循环嵌套的层数,这时可以考虑用递归法来完成搜索任务。递归是一种常用算法,它是搜索的另一种实现方式。如果在算法设计中采用一个函数或过程直接或间接地调用它自身来解决问题的方法,则称该方法为递归算法。递归算法必须要设计好一个或若干个确定的递归终止条件。
一......
Sample Input
4 2 //用0,1组合出四个数字来
Sample Output
0000 0001 0010 0011 0100 0101
0110 0111 1000 1001 1010 1011
1100 1101 1110 1111
#include<stdio.h>int n,m,ans;int mat[10];void solve(int l){ if(l>=n) { for(int i=0;i<n;++i)printf("%d", mat[i]); puts(""); ans++; return ; } for(int i=0;i<m;++i) { mat[l]=i; solve(l+1); }}int main(){ while(scanf("%d%d", &n, &m)!=EOF) { ans=0; solve(0); printf("%d\n",ans); } return 0;}
二全组合排列(没有去重,没有考虑0的问题)
#include<stdio.h>#include<string.h>const int maxn=11;int n;int used[maxn];//标记数组int mat[maxn];//存储数组int num[maxn];//输出数组void solve(int l){ if(l>=n) { for(int i=0;i<n;++i)printf("%d", num[i]); puts(""); return; } for(int i=0;i<n;++i) { if(!used[i]) { used[i]=1; num[l]=mat[i]; solve(l+1); //递归 used[i]=0; //回溯 } }}int main(){ while(scanf("%d", &n)!=EOF) { for(int i=0;i<n;++i) scanf("%d", mat+i); memset(used,0,sizeof(used)); solve(0); } return 0;}
#include <cstdio>#include <cstring>const int maxn = 10;int n,v,ans;int used[maxn],a[maxn],num[maxn];void push(int v){ for(int i = 0 ; i < ans ; i++) { if(a[i]==v) { ++used[i]; return ; } } a[ans]=v; ++used[ans++]; //ans为不重复的数字的个数 //used[i]保存的是i出现的次数}void solve(int l){ if(l>=n) { for(int i = 0 ; i < n ; i++)printf("%d",num[i]); puts(""); } for(int i = 0 ; i < ans ; i++) { if(l==0&&a[i]==0)continue; if(used[i]) { used[i]--; num[l]=a[i]; solve(l+1); used[i]++; } }}int main(){ while(scanf("%d", &n)!=EOF) { memset(used,0,sizeof(used)); ans=0; for(int i=0;i<n;++i) { scanf("%d", &v); push(v); } solve(0); } return 0;}
0 0
- dfs 递归思想 解决排列组合的一些基础问题
- 算法——递归思想解决排列组合问题
- 递归的思想生成排列组合
- 一道递归思想的排列组合题目
- 递归思想解决汉诺塔的问题
- 典型递归的思想解决汉诺塔问题
- 递归思想解决小问题
- 递归思想解决经典问题
- 递归思想----解决饮料问题
- 排列组合问题的回溯(Backtracking) 思想总结
- 递归实现排列组合问题
- 递归-排列组合问题
- 用递归思想解决河内塔问题
- 利用递归解决一些问题
- 用二叉树遍历思想解决的一些问题
- 解决排列组合问题的通用算法
- 解决排列组合问题的通用算法
- 排列组合的递归算法
- Nginx安装
- 基于JMF RTP的网络传输媒体流
- org.springframework.http.converter.HttpMessageNotWritableException:
- Jvm工作原理学习笔记
- 如何在Ubuntu下安装比较工具Beyond Compare
- dfs 递归思想 解决排列组合的一些基础问题
- 博客搬家
- 霸道的MDI
- 第 3 页:Context组件
- 九度OJ 题目1089:数字反转
- GradientDrawable 的简单使用(绘制控件的背景)
- OCUI界面设计:UIView动画事务与UIImageView动画
- mac下ADB的配置和常用命令
- 学校集训心得DAY8.10