洛谷p1706全排列
阿新 • • 發佈:2019-02-05
else {0} 大循環 未使用 stream 註意 空格 ios ==
剛剛學了深度優先搜索,找了道題試做了一下
先貼代碼
#include<iostream> using namespace std; int n; int aa[100000];//數組開大一點,表示1———n,這幾個數 int book[1000010]={0};//用來標記1——n這幾個數是否被用過,避免重復 void dfs(int step){//這道題可以理解為像n個盒子裏填數,step表示站在第幾個盒子前 if(step>n){//若當前的step比最後一個盒子還大,就說明n個盒子已經填完數了,下面用for循環依次輸出盒子裏的數 for(int i=1;i<=n;i++){ cout<<" "<<aa[i];//註意空格加在數字前,建議直接復制這幾個空格 }cout<<endl;//換行
return;//回到上一次調用函數的地方,這個return可有可無 }else{ for(int i=1;i<=n;i++){//現在站在第step個盒子前,開始把數字從1——n開始試 if(book[i]==0){//若數字i沒有被用過 aa[step]=i;//則把數字i放進第step個aa盒子裏 book[i]=1;//並標記這個數字已經用過 dfs(step+1);//站到下一個盒子面前.....遞歸 book[i]=0;//這裏記著把數字還原成未使用狀態,因為外層大循環還要使用 } } }return;//return結束掉dfs函數 } int main(){ cin>>n; dfs(1);從第一個盒子前開始... return 0; }
洛谷p1706全排列