NOJ 1324 穷举所有排列

来源:互联网 发布:英语单词跟读软件 编辑:程序博客网 时间:2024/05/29 19:08

2016.10.19

【题目描述】
穷举所有排列

时限:100ms 内存限制:10000K 总时限:300ms

描述:
输入一个小于10的正整数n,按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。

输入:
输入一个小于10的正整数n。
输出:
按把每个元素都交换到最前面一次的方法,输出前n个小写字母的所有排列。

输入样例:
3
输出样例:
abcacbbacbcacbacab

【解题思路】
使用回溯的思想,生成n个数的所有排列。
当程序执行到第k层时,默认前面的序列已经排好,接下来k与后面的数(包括自己)依次交换位置,进行下一层,结束后恢复状态。

【代码实现】

# include <stdio.h>int n;char a[15] = {0,'a','b','c','d','e','f','g','h','i','j','k','l'};void search(int );void swap(int ,int );void output();int main(void){    int i;    scanf("%d", &n);    search(1);    return 0;}void search(int k){    int i;    if (k == n + 1)        output();    else    {        for (i = k; i <= n; ++i)        {            swap(i, k);            search(k + 1);            swap(i, k);        }    }}void swap(int x, int y){    int t;    t = a[x];    a[x] = a[y];    a[y] = t;}void output(){    int i;    for (i = 1; i <= n; ++i)        printf("%c", a[i]);    printf("\n");}

【心得体会】
进一步体会回溯算法

0 0
原创粉丝点击