例:编写一个输出1,2,3…,n,n个数字所组成的所有排列.例如:n=3 ,
则全排列为:
111 112 113
121 122 123
131 132 133
211 212 213
221 222 223
231 232 233
311 312 313
321 222 223
331 332 333
#include <iostream>
#define NUM 100
using namespace std;
int N;
bool visited[NUM][NUM]= {0};
int temp[NUM];
int k = 2;
void DFS(int t,int n)
{
if(n==1){
for(int i = 1;i<=N;i++)
cout <<temp[i]<<" ";
cout <<endl;
return ;
}
for(int i = 1;i<=N;i++){
if(!visited[i][n]){
// visited[t][n] = true;
temp[k++] = i;
DFS(i,n-1);
k--;//所以k永远也到不到4
// visited[t][n] = false;
//在递归的后面的这两步就是回溯的使用方法
}
}
}
int main()
{
cin>>N;
for(int i = 1;i<=N;i++){//将每一个元素看做是一个连通分量;
temp[1] =i;
DFS(i,N);
}
return 0;
}