摘要:本文主要向大家介绍了C/C++知识点之C语言实现全排列,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。
本文主要向大家介绍了C/C++知识点之C语言实现全排列,通过具体的内容向大家展示,希望对大家学习C/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<n;i++)
6 printf("%d",A[i]);
7 printf("\n");
8 }
9 else for(int j=1;j<n+1;j++){
10 int ok=1;
11 for(int k=0;k<cur;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
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<n;i++){
13 cout<<record[i]<<" ";
14 }
15 totalSize++;
16 cout<<endl;
17 return;
18 }
19 for(int i=1;i<=n;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 = "<<totalSize<<endl;
35 return 0;
36 }
View Code
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!
您输入的评论内容中包含违禁敏感词
我知道了
请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号