nyoj 366 D的小L(全排列)
2013-10-30 15:30
225 查看
描述
一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧
),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了
,,,聪明的你能帮匡匡解围吗?
输入第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10)
输出按特定顺序输出所有组合。
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
样例输入
样例输出
一天TC的匡匡找ACM的小L玩三国杀,但是这会小L忙着哩,不想和匡匡玩但又怕匡匡生气,这时小L给匡匡出了个题目想难倒匡匡(小L很D吧
),有一个数n(0<n<10),写出1到n的全排列,这时匡匡有点囧了
,,,聪明的你能帮匡匡解围吗?
输入第一行输入一个数N(0<N<10),表示有N组测试数据。后面的N行输入多组输入数据,每组输入数据都是一个整数x(0<x<10)
输出按特定顺序输出所有组合。
特定顺序:每一个组合中的值从小到大排列,组合之间按字典序排列。
样例输入
2 2 3
样例输出
12 21 123 132 213 231 312 321
上网看了一下其他大神的代码,是用swap解决的,代码很好,但是理解起来有难度。所以我在这里用了“数组+树”的解决方法。通俗点来说就是遍历,不过有一点要注意的就是标志位的处理!
#include <stdio.h> int s[10] = {0}, a[10]; int j = 0; void PaiLie(int k, int n) { int i = 0, l; if((j - 1) == n) { for(l = 0; l <= n; l++) printf("%d", a[l]); printf("\n"); } else { for(i = 0; i <= n; i++) { if(s[i] == 0) { s[i] = 1; a[j++] = i + 1; PaiLie(i, n); j--; s[i] = 0; } } } } int main() { int n, x; scanf("%d", &n); for(; n > 0; n--) { scanf("%d", &x); PaiLie(0, x - 1); } return 0; }
相关文章推荐
- NYOJ 366 (全排列)
- nyoj 366 D的小L 【全排列&&必须记住】
- NYOJ 366 D 的小L(全排列)
- nyoj 366 D的小L 【全排列(模板)】
- nyoj366 D的小L(STL)(DFS)
- NYOJ--366--D的小L
- nyoj-366-D的小L
- NYOJ 366--D的小L【next_permutation水题】
- nyoj-366-D的小L(求全排列)
- NYOJ 1427 速算24点(搜索&&全排列)
- NYOJ366 D的小L next_permutation函数的用法
- 全排列函数 nyoj 366(next_permutation()函数)
- NYOJ 366 D的小L
- nyoj 366 D的小L(数的全排)
- nyoj-366 D的小L
- NYOJ366 D的小L next_permutation函数的用法
- nyoj 366 [【next_permutation()函数学习】
- NYOJ 366 D的小L (DFS 全排列)
- NYOJ 366--D的小L【next_permutation水题】
- 全排列 和 C++ string类 NYOJ 19