50073081 YZM的全排列

【试题描述】

一天,老师给可怜的YZM出了一道题:写出1~n的全排列。YZM写了一天也没写出来。请你帮帮快跪的YZM,输出1~n的全排列。注:这里n为9

【输入要求】

输入n

【输出要求】

1~n的全排列,每个一行

【输入实例】

2

 

【输出实例】

12
21

【其他说明】

不允许使用内部函数,也不许直接输出。题目由wxjor提供。
wxjor温馨提示:n<=9

【试题分析】

这一题也是一道经典的不能再经典的dfs,但可能有些初学者不知道DFS,我就讲的细一点点。我们可以定义一个记录数的工具step,一开始step从1开始。如果step超过了n,那么证明这行排列排列完毕了。然后依次输出,别忘记输出回车!然后结束这次DFS。代码如下:

if(n+1==step)//当n+1==step代表step超过了n
{
for(int j=1;j<=n;j++) printf("%d",a[j]);//挨个输出
printf("\n");//一定要回车
return ;//结束这行的DFS
}

大家想一想,还差什么呢?

当然,差for(int i=1;i<=n;i++)这层循环,还有吗?

我们来看一下,为什么上面的样例中没有给出11和22,难道是题错了?

注意这一点:全排列是不能有重复的。

那么,怎么知道这个数以前处没出现过呢?

我们可以定义一个book数组,如果i出现了,那么把book[i]表为1。

for循环代码:

for(i=1;i<=n;i++)//从一到n循环
if(book[i]==0)//如果没有出现过
{
a[step]=i;//第step部是i
book[i]=1;//标记为出现过
dfs(step+1);//遍历下一步
book[i]=0;//标记为未出现过,因为下一个排列要使用
}

dfs整体代码:

void dfs(int step)
{
int i;
if(n+1==step)
{
for(int j=1;j<=n;j++) printf("%d",a[j]);
printf("\n");
return ;
}
for(i=1;i<=n;i++)
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}

然后int main()。

输入n。

dfs(?)。

从几开始呢?

我们说,通常情况下,都是从1开始的。

来看看为什么我们这题是从1开始?因为我们是从step=1时来弄的。

【代码】

#include<iostream>
#include<fstream>
using namespace std;
int a[10],book[10],n;
void dfs(int step)
{
int i;
if(n+1==step)
{
for(int j=1;j<=n;j++) printf("%d",a[j]);
printf("\n");
return ;
}
for(i=1;i<=n;i++)
if(book[i]==0)
{
a[step]=i;
book[i]=1;
dfs(step+1);
book[i]=0;
}
}
int main()
{
scanf("%d",&n);
dfs(1);
}

YZM的全排列的更多相关文章

  1. PHP实现全排列(递归算法)

    算法描述:如果用P表示n个元素的全排列,而Pi表示n个元素中不包含元素i的全排列,(i)Pi表示在排列Pi前面加上前缀i的排列,那么n个元素的全排列可递归定义为:    ① 如果n=1,则排列P只有一 ...

  2. hdu5651 xiaoxin juju needs help (多重集的全排列+逆元)

    xiaoxin juju needs help 题意:给你一个字符串,求打乱字符后,有多少种回文串.                      (题于文末) 知识点: n个元素,其中a1,a2,··· ...

  3. [LeetCode] Palindrome Permutation II 回文全排列之二

    Given a string s, return all the palindromic permutations (without duplicates) of it. Return an empt ...

  4. [LeetCode] Palindrome Permutation 回文全排列

    Given a string, determine if a permutation of the string could form a palindrome. For example," ...

  5. [LeetCode] Permutations II 全排列之二

    Given a collection of numbers that might contain duplicates, return all possible unique permutations ...

  6. [LeetCode] Permutations 全排列

    Given a collection of numbers, return all possible permutations. For example,[1,2,3] have the follow ...

  7. 全排列算法的JS实现

    问题描述:给定一个字符串,输出该字符串所有排列的可能.如输入“abc”,输出“abc,acb,bca,bac,cab,cba”. 虽然原理很简单,然而我还是折腾了好一会才实现这个算法……这里主要记录的 ...

  8. java实现全排列

    前天上午的面试遇到了一个用java实现一串数字的全排列的题,想来想去用递归最方便,可是没有在规定的时间内完成555,今天上午有空便继续写,以下是完成后的代码: import java.util.Arr ...

  9. poj3187-Backward Digit Sums(枚举全排列)

    一,题意: 输入n,sum,求1~n的数,如何排列之后,相邻两列相加,直到得出最后的结果等于sum,输出1~n的排列(杨辉三角)  3 1 2 4 //1~n 全排列中的一个排列  4 3 6  7 ...

随机推荐

  1. linux power button

    最近需要使用到power button按键,linux中有gpio keys的机制,只要注册即可. device注册 arch/arm/mach-mx6/board-mx6q_sabresd.c #d ...

  2. AD834+表面声波滤波器调试小结

    AD834:带宽较宽,300M无压力,但是输出幅度小,当输入2VPPX2VPP的时候最大输出400mVPP.一个特别要注意的地方是输入走线尽量短,敷铜间距至少满足3倍线宽,不然隔直之后还会耦合信号进去 ...

  3. CentOS设置虚拟网卡做NAT方式和Bridge方式桥接

    CentOS设置虚拟网卡做NAT方式和Bridge方式桥接 http://www.centoscn.com/CentOS/config/2015/0225/4736.html 摘要:KVM虚拟机网络配 ...

  4. 发布自己的nuget包;报错source parameter was not specified

    16-10-27 VS下使用 程序包管理器控制台 运行: 1.cd 命令走到 工程文件夹下,使用 ls 命令查看当前目录: 2. 使用 nuget spec 创建: 3. 使用 nuget pack ...

  5. News: Visual Studio Code support debugging Linux Apps

    http://arstechnica.com/information-technology/2015/11/visual-studio-now-supports-debugging-linux-app ...

  6. bash变量操作

    1.条件变量替换: Bash Shell可以进行变量的条件替换,既只有某种条件发生时才进行替换,替换 条件放在{}中. (1) ${value:-word} 当变量未定义或者值为空时,返回值为word ...

  7. 详解 ASP.NET并行,异步,多线程

    最近在学习.net4以上版本新特性的时候,发现在异步这方面提供了很多好玩的.以下Mark 2篇好文,温故而知新! http://www.cnblogs.com/wisdomqq/archive/201 ...

  8. linux:ACL权限

    ACL权限是为了防止权限不够用的情况,一般的权限有所有者.所属组.其他人这三种,当这三种满足不了我们的需求的时候就可以使用ACL权限: 比如:一个网络老师,给一个班的学员上课,他在linux的根目录下 ...

  9. 《30天自制操作系统》09_day_学习笔记

    harib06a: 在昨天的最后一部分,我们已经变成了32位的模式,目的就是希望能够使用电脑的全部内存. 虽然鼠标的显示处理有一些叠加问题,不过笔者为了不让我们感到腻烦,先带我们折腾一下内存 这里笔者 ...

  10. J2EE maven pom.xml常用的jar包

    新建一个maven webapp工程,默认的pom.xml文件如下: <project xmlns="http://maven.apache.org/POM/4.0.0" x ...