C语言实现全排列

2021-07-12 04:04

阅读:627

标签: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


评论


亲,登录后才可以留言!