全排列n!:
1 #include <iostream>
2 using namespace std;
3
4 void Perm(int k,int n,int a[]){
5 if(k==n){
6 for(int i=0;i<n;i++)
7 cout<<a[i]<<' ';
8 cout<<endl;
9 return;
10 }
11 for(int i=k;i<n;i++){
12 swap(a[k],a[i]);
13 Perm(k+1,n,a);
14 swap(a[i],a[k]); //回溯
15 }
16 }
17 int main(){
18 int i,n,a[10];
19 while(cin>>n,n){
20 for(i=0;i<n;i++) a[i]=i+1;
21 Perm(0,n,a);
22 }
23 return 0;
24 }
组合数C(n,k):
1 #include <iostream> 2 using namespace std; 3
4 bool visited[10];
5 void dfs(int pos,int cnt,int n,int k,int a[]){
6 if(cnt==k){
7 for(int i=0;i<n;i++)
8 if(visited[i]) cout<<a[i]<<' ';
9 cout<<endl;
10 return;
11 }
12 if(pos==n) return;
13 if(!visited[pos]){
14 visited[pos]=true;
15 dfs(pos+1,cnt+1,n,k,a);
16 visited[pos]=false; //回溯
17 }
18 dfs(pos+1,cnt,n,k,a);
19 }
20 int main(){
21 int i,n,k,a[10];
22 while(cin>>n>>k,n||k){
23 for(i=0;i<n;i++) a[i]=i+1;
24 dfs(0,0,n,k,a);
25 }
26 return 0;
27 }
全排和组合
最新推荐文章于 2022-03-01 16:09:03 发布