代码一:数字有重复:

 #include <cstdio>
int n,m,a[],arr[]={,,,};
void dfs(int v){
if(v >= n){
for(int i = ;i<n;i++)
printf("%d ",a[i]);
printf("\n");
return ;
}
for(int i = ; i<m;i++){
a[v] = arr[i];
dfs(v+);
}
}
int main(){
while(scanf("%d%d",&n,&m)==){
dfs();
}
}

答案:


代码二:含数组排列,数字无重复:

 #include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct Node{
int m[];
};
int cmp(Node a,Node b){
for(int i=;a.m[i];i++){
if(a.m[i]==b.m[i])continue;
if(a.m[i]<b.m[i])return ;
else return ;
}
}
int mark[],num[],t;
Node pt[];
int n;
void dfs(int k){
if(k>=n){
for(int i=;i<k;i++)pt[t].m[i]=num[i];
t++;
return ;
}
for(int i=;i<=n;i++){
if(!mark[i]){mark[i]=;
num[k]=i;
dfs(k+);
mark[i]=;
}
}
}
int main(){
while(~scanf("%d",&n)){t=;
memset(mark,,sizeof(mark));
dfs();
sort(pt,pt+t,cmp);
for(int i=;i<t;i++){
for(int j=;j<n;j++)printf("%d ",pt[i].m[j]);
puts("");
}
}
return ;
}

答案:


全排列:南阳oj组合数:

 #include<stdio.h>
int m[];
int n,k;
void dfs(int top,int flot){
if(flot>=k){
for(int i=;i<flot;i++)printf("%d ",m[i]);
puts("");return ;
}
for(int i=top;i>;i--){
m[flot]=i;
dfs(i-,flot+);
}
return ;
}
int main(){
while(~scanf("%d%d",&n,&k)){
dfs(n,);
}
return ;
}

答案:


关于各种排列(dfs)的更多相关文章

  1. 奇偶交错排列(DFS)

    Description 一个1-n1−n的排列满足所有相邻数字奇偶性不同,那么称该排列为奇偶交错排列. 按字典序输出1-n1−n的所有奇偶交错排列. Input 输入一个整数n( 2 \le n \l ...

  2. DFS实现排列组合

    所谓排列,是指从给定的元素序列中依次取出元素,需要考虑取出顺序.比如,取出元素3, 5,因取出顺序的不同,则形成的序列{3, 5}与{5, 3}是不同的排列序列.对于长度为n的元素序列取出k个元素,则 ...

  3. nyoj 19擅长排列的小明 (DFS)

    擅长排列的小明 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...

  4. dfs 生成排列和组合

    利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...

  5. HDU-1716 排列2 (DFS)

    排列2 Time Limit : 1000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submissio ...

  6. 蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]

    今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行.要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 171264 ...

  7. hdu 1716 排列2(DFS搜索)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Time Limit: 1000/1000 MS (Java/Others)    Me ...

  8. noip 1995 灯的排列问题 排列组合 DFS

    题目描述 设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数). 放灯时要遵守下列规则: ①同一种颜色的灯不能分开: ②不同颜 ...

  9. DFS排列组合问题

    这四个使用DFS来求解所有组合和排列的例子很有代表性,这里做一个总结: 1.不带重复元素的子集问题 public ArrayList<ArrayList<Integer>> s ...

随机推荐

  1. UESTC_方老师分身 I CDOJ 914

    方老师分身 I Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submit S ...

  2. Populating Next Right Pointers in Each Node 解答

    Question Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLink ...

  3. Master Theorem

    Master theorem provides a solution in asymptotic terms to solve time complexity problem of most divi ...

  4. 【CF 676B Pyramid of Glasses】模拟,递归

    题目链接:http://codeforces.com/problemset/problem/676/B 题意:一个n层的平面酒杯金字塔,如图,每个杯子的容量相同.现在往最顶部的一个杯子倒 t 杯酒,求 ...

  5. UML_活动图

    一.活动图的组成元素 Activity Diagram Element 1.活动状态图(Activity) 2.动作状态(Actions) 3.动作状态约束(Action Constraints) 4 ...

  6. 2、elasticsearch 的安装和插件的安装

    1.安装Elasticsearch集群 1.下载elasticsearch-2.0.0.tar.gz,执行tar -zxvf elasticsearch-2.0.0.tar.gz解压 2.修改conf ...

  7. iOS openURL方法实现打电话、发短信、发邮件、打开其他App

    UIApplication有个功能十分强大的openURL:方法 - (BOOL)openURL:(NSURL*)url; 通过这个方法,我们可以实现: 先获取 UIApplication UIApp ...

  8. 自学Android的第一个小程序(小布局、button点击事件、toast弹出)

    因为上班,学习时间有限,昨晚才根据教程写了一个小程序,今天忙里偷闲写一下如何实现的,来加深一下印象. 首先创建一个Android项目, 通过activity_xxx.xml布局文件来添加组件来达到自己 ...

  9. JS 不定函数参数argument的用法

    本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...

  10. pl sql练习(4)

    1.ROW_NUMBER 返回连续的排位,不论值是否相等 select deptno,ename,sal, row_number () over (partition by deptno order ...