牛客网 2018年全国多校算法寒假训练营练习比赛(第四场) H.老子的全排列呢-DFS

H.老子的全排列呢
 
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

老李见和尚赢了自己的酒,但是自己还舍不得,所以就耍起了赖皮,对和尚说,光武不行,再来点文的,你给我说出来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


这个题简直是,真的很想喊一句:老子的全排列呢???!

写的时候简直蠢哭,直接贴的板子,但是自己调试的时候,输出的是1-4的全排列,结果忘记改了直接交上去显示格式错误,我也是醉了。

还特别蠢的问客服小姐姐,格式错误什么情况???我的空格和换行都没错啊,后来发现之后,简直是|ू•ૅω•́)ᵎᵎᵎ(撞墙)

因为是直接贴的网上的板子,不发表任何言论。

代码:

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 #include<cmath>
 5 #include<algorithm>
 6 #include<queue>
 7 using namespace std;
 8 int a[100000];
 9 void dfs(int cur,int n){//cur表示目前正在填的数,n表示总共要填的数
10     if(cur==n){//递归边界,说明填完了
11         for(int i=0;i<n;i++){//一个一个的输出
12             if(i!=n-1)cout<<a[i]<<" ";
13             else cout<<a[i]<<endl;
14         }
15     }
16     for(int i=1;i<=n;i++){//把数字1-n填入
17         int ok=1;
18         for(int j=0;j<cur;j++){//遍历目前a数组里面的元素,判断当前这个数有没有填过(用过)
19             if(a[j]==i) ok=0;
20         }
21         if(ok==1){
22             a[cur]=i;//没有填过就填 ,把它放在a数组的最后
23             dfs(cur+1,n);//再排A数组元素里面的第cur+1个位置 (这里就不需要设置撤销的动作了~反正每次进来都会判断数字有没有填过)
24         }
25     }
26 }
27 int main(){
28     dfs(0,8);
29     return 0;
30 }

因为不想再补最近的这些题了,随便写写东西代表结束。

后面要学点新东西了(嘻嘻嘻~ )|ω・`)

溜了溜了,最近熬夜太多,心脏疼。。。

原文地址:https://www.cnblogs.com/ZERO-/p/9711303.html