C++ P1706 全排列問題
阿新 • • 發佈:2018-11-11
這個題的有趣之處在於:
如果我們排列確定數量的數字的話,那麼我們只要寫對應數量的for迴圈就好了。
但是這個數量是不確定的。
因為排列數字的數量不確定,所以我們可以用一些特殊的方法來寫不確定數量的for迴圈。
比如:
void xunhuan(int value){
if(value!=1){
xunhuan(value-1);
}
for(int i=1;i<=n;i++{//此處假設n為迴圈次數
//do something
}
}
//呼叫時:xunhuan(3)即可迴圈3次
下面是AC程式碼:
#include<cstdio> #include<iostream> using namespace std; int n,data[101]; bool mark[101]; void print(){ for(int i=1;i<=n;i++){ printf("%5d",data[i]); } cout<<endl; } void dfs(int k){ if(k==n){ print(); return; } for(int i=1;i<=n;i++){ if(!mark[i]){ mark[i]=1; data[k+1]=i; dfs(k+1); mark[i]=0; } } } int main(){ cin>>n; dfs(0); }
可以把一個dfs方法的呼叫認為成一個for迴圈體,也就是說,我們通過在dfs方法內呼叫dfs方法本身,製作了不限量的for迴圈。然後用for迴圈的方式理解即可。