老子的全排列呢

链接:https://www.nowcoder.com/acm/contest/76/H
来源:牛客网

题目描述:
老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来1-8的全排序,我就让你喝,这次绝不耍你,你能帮帮和尚么?

输入描述:

输出描述:

1~8的全排列,按照全排列的顺序输出,每行结尾无空格。
示例1

输入

No_Input

输出

Full arrangement of 1~8

备注:

1~3的全排列  :
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

解法一:用封装函数next_permutation。点击查看next_permutation函数的原理与使用

#include<stdio.h>
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
    int ans[8]={1,2,3,4,5,6,7,8};
    sort(ans,ans+8);
    do
    {
    	for(int i=0;i<8;i++)
		{
			if(i!=0) printf(" ");
			printf("%d",ans[i]);
		}
    	printf("\n");
    }while(next_permutation(ans,ans+8));
    return 0;
}
解法二:利用递归
#include<stdio.h>
#include <iostream>
using namespace std;
bool p[10];
int a[10];
int cnt=0;
void dfs(int k){
    if (k>8){
        for (int i =1 ; i <= 7 ; i ++ )
            printf("%d ",a[i]);
        printf("%d\n",a[8]);
        return ;
    }
    for (int i = 1 ; i <= 8 ; i ++ )
       if (!p[i]){
           p[i]=1;
           a[k]=i;
           dfs(k+1);
           p[i]=0;
       }
}
int main(){
    dfs(1);
    return 0;
}

posted @ 2018-02-12 21:45  友人-A  阅读(207)  评论(0编辑  收藏  举报