C语言实现全排列
标签:pac ++ lap ide 深度遍历 closed 标记 c语言 分享图片
一、递归实现全排列
1 #include"cstdio"
2 int A[50];
3 void print_permutation(int n,int *A,int cur){
4 if(cur==n){
5 for(int i=0;i)
6 printf("%d",A[i]);
7 printf("\n");
8 }
9 else for(int j=1;j1;j++){
10 int ok=1;
11 for(int k=0;k)
12 if(A[k]==j)
13 ok=0;
14 if(ok){
15 A[cur]=j;
16 print_permutation(n,A,cur+1);
17 }
18 }
19 }
20 int main(){
21 int n;
22 scanf("%d",&n);
23 print_permutation(n,A,0);
24 return 0;
25 }
View Code
二、解答树
1 #include string.h>
2 #include 3
4 using namespace std;
5 const int N = 99999999; //输入排序的个数的最大值
6 int record[N]; //记录每次排序的序列
7 int visited[N]; //标记节点是否被访问过
8 int n; //输入节点的数目
9 int totalSize = 0;
10 void DFS(int start){
11 if(start>=n){ //递归出口
12 for(int i=0;i){
13 cout" ";
14 }
15 totalSize++;
16 coutendl;
17 return;
18 }
19 for(int i=1;i//深度遍历节点,并标记已经访问过的节点
20 if(visited[i]==0){
21 visited[i] = 1;
22 record[start] = i;
23 DFS(start+1); //递归遍历
24 visited[i] = 0; //回退时标记回退的节点为未被访问节点
25 }
26 }
27 }
28
29 int main()
30 {
31 cin>>n;
32 memset(visited,0,n);
33 DFS(0);
34 cout"totalSize = "endl;
35 return 0;
36 }
View Code
三、
调用next_permutation()方法
C语言实现全排列
标签:pac ++ lap ide 深度遍历 closed 标记 c语言 分享图片
原文地址:https://www.cnblogs.com/tao7/p/9549184.html
文章来自:
搜素材网的
编程语言模块,转载请注明文章出处。
文章标题:
C语言实现全排列
文章链接:http://soscw.com/index.php/essay/103986.html
评论