首页 > 代码库 > 洛谷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

回溯算法,另外涉及到常宽:

cout<<setw(5)<<ans[i]或printf(“%5d”,ans[i])都可以

(注意如果用setw的话要引用iomanip库。)

#include<cstring>

#include<string>

#include<algorithm>

#include<iostream>

#include<cstdio>

#include<iomanip>

using namespace std;

bool visit[1001];

int n;

int ans[1001];

void search(int k)

{

      if(k>n)

      {

           for(int i=1;i<=n;i++)

                 cout<<setw(5)<<ans[i];

           cout<<endl;

      }

      else

      {

           for(int i=1;i<=n;i++)

           {

                 if(!visit[i])

                 {

                      ans[k]=i;

                      visit[i]=true;

                      search(k+1);

                      visit[i]=false;

                 }

           }

      }

}

int main()

{

      ios::sync_with_stdio(false);

      cin>>n;

      search(1);

    return 0;

}

洛谷P1706全排列问题