关于各种排列(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 ...
随机推荐
- Python IDE的选择和安装
安装好Python后我们需要选择合适自己的IDE进行学习,虽然利用python默认的编辑器,或者直接文档编辑也可以进行基础的学习,但总归不是太方便,能够开发python项目的IDE很多,如sublim ...
- hdu 1599 find the mincost route(flyod求最小环)
Problem Description 杭州有N个景区,景区之间有一些双向的路来连接,现在8600想找一条旅游路线,这个路线从A点出发并且最后回到A点,假设经过的路线为V1,V2,....VK,V1, ...
- Python常用模块(time, datetime, random, os, sys, hashlib)
time模块 在Python中,通常有这几种方式来表示时间: 时间戳(timestamp) : 通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量.我们运 ...
- 基于express框架的应用程序骨架生成器介绍
作者:zhanhailiang 日期:2014-11-09 本文将介绍怎样使用express-generator工具高速生成基于express框架的应用程序骨架: 1. 安装express-gener ...
- AS3聊天单行输入框图文混排完美实现
几年前刚毕业.第一个游戏模块做的就是聊天.到如今.几个游戏写过几次聊天模块. 之前在4399做的<幻龙骑士>(又名<神骑士>),还有上周六刚上线的<疯狂的子弹>, ...
- AlertDialog详解
参考地址:http://blog.csdn.net/woaieillen/article/details/7378324 1.弹出提示框 new AlertDialog.Builder(LoginAc ...
- XHR 框架与 Dojo( xhrGet,xhrPut,xhrDelete)
总结 本文介绍了 Dojo 中三种浏览器与服务器交互的方式,这三种方式各有优缺点,但是在使用方式却出奇的一致: xhr 框架的函数,dojo.io.iframe.dojo.io.script 对象的函 ...
- C# Process.Start()方法详解(转)
C# Process.Start()方法详解 System.Diagnostics.Process.Start(); 能做什么呢?它主要有以下几个功能: 1.打开某个链接网址(弹窗). 2.定位打开某 ...
- [Linked List]Insertion Sort List
Total Accepted: 59422 Total Submissions: 213019 Difficulty: Medium Sort a linked list using insertio ...
- N - Robot Motion(第二季水)
Description A robot has been programmed to follow the instructions in its path. Instructions for the ...