求A(m,n)全排列:一共N个盒子中放入数字,不能重复。DFS算法。
#include <iostream>
using namespace std;
#define MAX 3 /*筛选排列最大数字为MAX*/
#define N 2 /*每一组数有N个数字*/
int box[N+1]; /*为了让数组下标从1开始,数组大小设为N+1*/
int vis[MAX+1]; /*当前数字是否被访问过*/
int cnt = 0;
/*函数声明*/
void dfs(int step);
int main(int argc, char *argv[]) {
dfs(1); /*从第一个盒子开始放数字*/
cout<<"Total:"<<cnt;
}
void dfs(int step){
if(step==N+1){ /*当盒子被放完了,一组N位数据已生成*/
for(int i = 1 ; i <= N;i++){
cout<<box[i];
}
cnt++;
cout<<endl;
return; //不可或缺
}
for(int i = 1;i <= MAX ; i++){ //筛选从数字1开始
if(vis[i]==0){
box[step]=i;
vis[i]=1;
dfs(step+1);
vis[i]=0;
}
}
}