代码一:数字有重复:

 #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. LeeCode-Linked List Cycle

    Given a linked list, determine if it has a cycle in it. /** * Definition for singly-linked list. * s ...

  2. 模块工具类--utils

    File: js\utils.js/** * 模块工具类,用来初始化各模块视图.自定绑定事件以及其他辅助功能等 * @class Utils */Utils = (function() { var i ...

  3. 【数学.前左上计数法】【HDU1220】Cube

    Cube Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  4. 【沙茶了+筛选保存最大质因数】【HDU2136】Largest prime factor

    Largest prime factor Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Oth ...

  5. 新一代分布式任务调度框架:当当elastic-job开源项目的10项特性

    作者简介: 张亮,当当网架构师.当当技术委员会成员.消息中间件组负责人.对架构设计.分布式.优雅代码等领域兴趣浓厚.目前主导当当应用框架ddframe研发,并负责推广及撰写技术白皮书.   一.为什么 ...

  6. W3C-XML

    XML XML Extensible Markup Language,可扩展标记语言 1 XML和HTML的区别 XML主要用来传输数据 HTML主要用来呈现数据内容 2 XML的主要用途 传输数据 ...

  7. transition的唧唧歪歪

    transition是css3新出的一个属性,大白话叫做过渡. 主要有下面这四个属性: transition-property.transition-duration.transition-timin ...

  8. ASP.NET通用权限验证组件实现

    沙发(SF)通用权限验证组件 开篇 本篇介绍通用权限验证的实现代码思路,总共分为导入参数.解析XML.根据XML配置进行处理.返回结果. 代码架构图 1.   类介绍 1.SFWebPermissio ...

  9. 清理SQL数据库日志

    Use DBSelect NAME,size From sys.database_files ALTER DATABASE DB SET RECOVERY SIMPLE WITH NO_WAIT AL ...

  10. Eclipse编译Arduino程序不能使用串口函数Serial.begin解决办法

    在Arduino官方的编译器当中Serial.begin(9600);初始化语句是可以直接使用的,而到Eclipse当中,同样的语句却不能用了.会出现下面的问题: 显然,这是Eclipse没有找到Se ...