P1706 全排列问题

题目描述

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

输入输出格式

输入格式:

n(1≤n≤9)

输出格式:

由1~n组成的所有不重复的数字序列,每行一个序列。每个数字保留5个常宽。

输入输出样例

输入样例#1:

3

输出样例#1:

1    2    3
    1    3    2
    2    1    3
    2    3    1
    3    1    2
    3    2    1

代码如下:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 int n, book[1010], st[1010];
 5 void dfs(int u){
 6     if(u == n){
 7         for(int i = 0; i < n; i++)    printf("%5d", st[i]);
 8         printf("\n");
 9     }
10     for(int i = 1; i <= n; i++){
11         if(!book[i]){
12             book[i] = 1;
13             st[u] = i;
14             dfs(u + 1);
15             book[i] = 0;
16         }
17     }
18 }
19 int main(){
20     scanf("%d", &n);
21     dfs(0);
22     return 0;
23 } 

全排列问题

原文地址:https://www.cnblogs.com/zoom1109/p/11174852.html

时间: 2024-08-30 10:43:05

P1706 全排列问题的相关文章

洛谷——P1706 全排列问题

P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 复制 3 输出样例#1: 复制 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 恶心的·输出 #include<cstdio> #include<cstring> #in

洛谷 P1706 全排列问题

题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 3 输出样例#1: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1代碼實現: #include<cstdio>int n,s[12];bool v[12];void qpl(int x){ if(x==n)

luogu P1706全排列问题

题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 题解 这题真是道好题,用STL的好题 正常的题解是这样的(我同学的qwq) #include<iostream> #include<iomanip> using namespace std; int n; int a[10001]; bool b[

luogu P1706 全排列问题

1 #include <iostream> 2 using namespace std; 3 int vis[10],ans[10],n; 4 void f(int x) 5 { 6 if (x == n + 1) 7 { 8 for (int i = 1;i <= n;i++) 9 cout << " " << ans[i]; 10 cout << endl; 11 return; 12 } 13 for (int i = 1;i

洛谷——基础搜索

1.P1706 全排列问题 题目描述 输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字. 输入输出格式 输入格式: n(1≤n≤9) 输出格式: 由1-n组成的所有不重复的数字序列,每行一个序列.每个数字保留5个常宽. 输入输出样例 输入样例#1: 3 输出样例#1: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 (⊙v⊙)嗯~ 代码: #include<iostream> #include<cstdio> #

题解 P1706 【全排列问题】

提供一种基于排序 的 非搜索 做法 思路: 将答案数组进行二分, 以变量 \(nn\) 为界, 前半部分为有序区,后半部分为无序区 对无序区按照字典序进行排序 每次递归, 都循环从无序区中取出元素, 并加入有序区 并将边界后移一位 之后重新对无序区 按照字典序进行排序, 然后将改变后的数组作为参数, 传到下一层递归中 当有序区的长度等于 \(l\) 时, 便找到了一组解,输出即可 附上代码: #include<iostream> #include<cstring> #include

全排列(传统&amp;&amp;黑科技)

近期几次考试的一些题目暴力分都有用到全排列. 全排列是个好东西啊... 回想一下,我们最开始学到全排列是什么时候呢? 大概是学搜索的时候罢... 一.传统搜索算法 想复习可以戳 https://www.luogu.org/problemnew/show/P1706 1 #include<iostream> 2 #include<cstdlib> 3 #include<cstdio> 4 #include<iomanip> 5 using namespace

生成n个元素的全排列 C实现

近期在准备复习算法设计的考试,下边记录一些,看笔记时突然想到的解法. 问题是这种 用递归实现 n 个元素的全排列. 当时老师给出的解答是 假定第i个元素 ri 放在首位,于是 f(r1,r2,-,rn) = f(ri U {r1, r2,-.,rn}) = U (ri & f(r1,r2, -, rn)), 当时应该是听懂了,只是如今看到这个笔记.又醉了. (这货竟然是我上课记的笔记 .... . .. .) 后来自己细致想想,事实上非常简单的 一个问题, 利用回溯法,把问题看成是一个排列树.能

递归实现全排列(一)

[思路] 下面用具体例子来阐述这种实现的思路,例如实现123的全排列组合. 要求123的全排列,可以分为以下情况: 情况1:第0位为1+23的全排列 情况2:第0位为2+13的全排列 情况3:第0位为3+32的全排列 上面的情况用代码实现如下: //情况1 //为了跟下面一致,加上swap(list[0],list[0]); perm(list,1,2); //为了跟下面一致,加上swap(list[0],list[0]); //情况2 swap(list[0],list[1]); perm(l