1. 程式人生 > >用深度優先搜尋實現全排列

用深度優先搜尋實現全排列

如何模擬出5個人站在一排所有站法?寫出一個5層迴圈好像就可以了,但是如果是n個人呢,我們不可能每次寫一個n層迴圈。但是深度優先搜尋,可以很容易實現這個問題。
輸入:每次給定一個n,代表n個人,n個人編號是從1到n
輸出:模擬所有站法。

//用搜索實現全排列。
#include<cstdio>
#include<cstring>
//#include<stack> 
#include<algorithm>
using namespace std;
void dfs(int i);
const int maxn = 100;
int num[maxn];
int
map[maxn]; int cop[maxn]; //stack<int> a; int ans,n; int main() { while(~scanf("%d",&n)) //n個人 { for(int i=1;i<=n;++i) { num[i]=i; //第i個人的編號設定為i map[i]=1; } dfs(1); //從第一開始搜尋
printf("%d\n",ans); ans=0; } return 0; } void dfs(int i) { if(i==n+1) //搜尋到 n+1個人的時候停止搜尋 { for(int i=1;i<=n;++i) { printf("%d ",cop[i]); } printf("\n"); ans++; return ; } for
(int j=1;j<=n;++j) { if(map[j]==1) { map[j]=0; cop[i]=num[j]; dfs(++i); i--; map[j]=1; } } }