全排列问题

全排列问题

最基础的搜索回溯,没有之一

原题

1、全排列问题(form.cpp)
【问题描述】
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
【输入格式】
n(1≤n≤9)
【输出格式】
由1~n组成的所有不重复的数字序列,每行一个序列。
【输入样例】
3
【输出样例】
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

算法分析

用递归把一个个数组里面,个数满了就计数(或输出)

源码

#include
#include
#include
using namespace std;
int n,a[1001];
bool b[1001];
void print()
{
    for(int i=1;i<=n;i++)
        cout<" ";
    cout<void tryy(int t)
{
    for(int i=1;i<=n;i++)
        if(b[i])
        {
            a[t]=i;
            b[i]=false;
            if(t==n)
               print();
            else
               tryy(t+1);
            b[i]=true;
        }
}
int main()
{
    freopen("form.in","r",stdin);
    freopen("form.out","w",stdout);
    memset(b,true,sizeof(b));
    cin>>n;
    tryy(1);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

你可能感兴趣的:(搜索与回溯,搜索)