码迷,mamicode.com
首页 > 其他好文 > 详细

深搜-----1~n的全排列

时间:2020-07-03 17:37:20      阅读:61      评论:0      收藏:0      [点我收藏+]

标签:ring   main   简单   一个   直接   mes   line   end   thml   

时隔“多年”,再来解决这个历史遗留的问题----深搜

题目描述

输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。

输入格式

一个整数 n

输出格式

由 1 ~ n 组成的所有不重复的数字序列,两数间空一格,每行一个序列。

总方案数

输入输出样例

输入 #1

3

输出 #1

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
6

思路很简单,深搜嘛,直接(拿样例来举例:)看代码吧!

 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <cmath>
 5 #include <algorithm>
 6 #define maxn 10005
 7 //#define ISA_XR
 8 using namespace std;
 9 int n,book[maxn],a[maxn],s;     //n-求1~n的全排列  a记录当前序列 book[i]记录 i 是否在序列中  s总排列方式个数   
10 void dfs(int step);        // step为当前在序列中的位置,即已放个数 + 1 
11 int main()
12 {
13     #ifdef ISA_XR
14         freopen(".in","r",stdin);
15         freopen(".out","w",stdout);
16     #endif
17     
18     scanf("%d",&n);
19     dfs(1);  //深搜 
20     printf("%d",s);  // 共有 n!种排列方式 
21     
22     #ifdef ISA_XR
23         fclose(stdin);
24         fclose(stdout);
25     #endif
26     
27     return 0;
28 }
29 
30 void dfs(int step)    
31 {
32     if(step == n + 1)        //所有数已放完,即已形成 1 种排列 
33     {
34         for(int i = 1;i <= n;i++)
35         {
36             printf("%d ",a[i]);        // 输出其中一种排列 
37         } 
38         printf("\n");
39         s++;                        //排列种数 + 1 
40         return;                        //回到上一次尝试 
41     } 
42     for(int i = 1;i <= n;i++)
43     {
44         if(book[i] == 0)         // 这个数没放在序列中 
45         {
46             a[step] = i,book[i] = 1;    //尝试一个数将其放入序列中,已用标记book为 1 
47             dfs(step + 1);    // 下一层“下一个盒子 ”(注意 x++ 与 x + 1 与 ++x 的加一先后顺序 )
48             book[i] = 0;    // 刚尝试过的数要放回 
49         }
50     }
51     return;        //回溯(回到上一次尝试) 
52 }

 好像把思路打出来更容易理解,但我太懒了,下次想起来了在打吧。。。。咕咕咕咕

深搜-----1~n的全排列

标签:ring   main   简单   一个   直接   mes   line   end   thml   

原文地址:https://www.cnblogs.com/xrisa/p/13228596.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!