首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

全排跟组合

2013-10-29 
全排和组合全排列n!:1 #include iostream2 using namespace std34 void Perm(int k,int n,int a[]){5if

全排和组合

全排列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 }


热点排行