关于各种排列(dfs)
代码一:数字有重复:
#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)的更多相关文章
- 奇偶交错排列(DFS)
Description 一个1-n1−n的排列满足所有相邻数字奇偶性不同,那么称该排列为奇偶交错排列. 按字典序输出1-n1−n的所有奇偶交错排列. Input 输入一个整数n( 2 \le n \l ...
- DFS实现排列组合
所谓排列,是指从给定的元素序列中依次取出元素,需要考虑取出顺序.比如,取出元素3, 5,因取出顺序的不同,则形成的序列{3, 5}与{5, 3}是不同的排列序列.对于长度为n的元素序列取出k个元素,则 ...
- nyoj 19擅长排列的小明 (DFS)
擅长排列的小明 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 小明十分聪明,而且十分擅长排列计算.比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想 ...
- dfs 生成排列和组合
利用深度优先搜索的性质可以方便的生成n的排列和组合,但是生成组合时每个组合里面元素的个数必须事先确定,以前以为生成组合跟排列一样到n时就可以回溯,直到今天做了某题之后才发现那是错的,那样做生成不了所有 ...
- HDU-1716 排列2 (DFS)
排列2 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submissio ...
- 蓝桥杯 - 数字排列(今有7对数字) - [两种不同的DFS思路]
今有7对数字:两个1,两个2,两个3,...两个7,把它们排成一行.要求,两个1间有1个其它数字,两个2间有2个其它数字,以此类推,两个7之间有7个其它数字.如下就是一个符合要求的排列: 171264 ...
- hdu 1716 排列2(DFS搜索)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1716 排列2 Time Limit: 1000/1000 MS (Java/Others) Me ...
- noip 1995 灯的排列问题 排列组合 DFS
题目描述 设在一排上有N个格子(N≤20),若在格子中放置有不同颜色的灯,每种灯的个数记为N1,N2,……Nk(k表示不同颜色灯的个数). 放灯时要遵守下列规则: ①同一种颜色的灯不能分开: ②不同颜 ...
- DFS排列组合问题
这四个使用DFS来求解所有组合和排列的例子很有代表性,这里做一个总结: 1.不带重复元素的子集问题 public ArrayList<ArrayList<Integer>> s ...
随机推荐
- UESTC_方老师分身 I CDOJ 914
方老师分身 I Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
- Populating Next Right Pointers in Each Node 解答
Question Given a binary tree struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLink ...
- Master Theorem
Master theorem provides a solution in asymptotic terms to solve time complexity problem of most divi ...
- 【CF 676B Pyramid of Glasses】模拟,递归
题目链接:http://codeforces.com/problemset/problem/676/B 题意:一个n层的平面酒杯金字塔,如图,每个杯子的容量相同.现在往最顶部的一个杯子倒 t 杯酒,求 ...
- UML_活动图
一.活动图的组成元素 Activity Diagram Element 1.活动状态图(Activity) 2.动作状态(Actions) 3.动作状态约束(Action Constraints) 4 ...
- 2、elasticsearch 的安装和插件的安装
1.安装Elasticsearch集群 1.下载elasticsearch-2.0.0.tar.gz,执行tar -zxvf elasticsearch-2.0.0.tar.gz解压 2.修改conf ...
- iOS openURL方法实现打电话、发短信、发邮件、打开其他App
UIApplication有个功能十分强大的openURL:方法 - (BOOL)openURL:(NSURL*)url; 通过这个方法,我们可以实现: 先获取 UIApplication UIApp ...
- 自学Android的第一个小程序(小布局、button点击事件、toast弹出)
因为上班,学习时间有限,昨晚才根据教程写了一个小程序,今天忙里偷闲写一下如何实现的,来加深一下印象. 首先创建一个Android项目, 通过activity_xxx.xml布局文件来添加组件来达到自己 ...
- JS 不定函数参数argument的用法
本篇文章只要是对js的隐含参数(arguments,callee,caller)使用方法进行了介绍. arguments arguments 该对象代表正在执行的函数和调用它的函数的参数. [func ...
- pl sql练习(4)
1.ROW_NUMBER 返回连续的排位,不论值是否相等 select deptno,ename,sal, row_number () over (partition by deptno order ...