利用图的深度优先遍历实现数列的全排序 例如 1 2 3 ------>1 2 3,1 3 2,2 1 3,2 3 1,3 1 2,3 2 1共6中不同的排序
参考代码如下:
#include <string.h>
#include <iostream>
using namespace std;
const int N = 99999999; //输入排序的个数的最大值
int record[N]; //记录每次排序的序列
int visited[N]; //标记节点是否被访问过
int n; //输入节点的数目
int totalSize = 0;
void DFS(int start){
if(start>=n){ //递归出口
for(int i=0;i<n;i++){
cout<<record[i]<<" ";
}
totalSize++;
cout<<endl;
return;
}
for(int i=1;i<=n;i++){ //深度遍历节点,并标记已经访问过的节点
if(visited[i]==0){
visited[i] = 1;
record[start] = i;
DFS(start+1); //递归遍历
visited[i] = 0; //回退时标记回退的节点为未被访问节点
}
}
}
int main()
{
cin>>n;
memset(visited,0,n);
DFS(0);
cout<<"totalSize = "<<totalSize<<endl;
return 0;
}