1 #include <iostream> 2 #include <algorithm> 3 #include <cstdio> 4 #include <string> 5 #include <string> 6 #include <cstring> 7 #include <map> 8 #include <utility> 9 using namespace std; 10 const int N = 1e2+20 ; 11 bool vis[N]; 12 int a[N],n; 13 void dfs(int num,int n){ 14 if(num==n){ 15 for(int i =0;i<n;i++){ 16 printf("%d%c",a[i],i==n-1?' ':' '); 17 } 18 return ; 19 } 20 for(int i=1;i<=n;i++){ 21 if(!vis[i]){ 22 vis[i]=1; 23 a[num]=i; 24 dfs(num+1,n); 25 vis[i]=0; 26 } 27 } 28 } 29 int main() 30 { 31 while(~scanf("%d",&n)){ 32 memset(vis,0,sizeof(vis)); 33 dfs(0,n); 34 } 35 return 0; 36 }
1 //用于生成全排列的函数 2 int a[N],n; 3 void init() 4 { 5 for(int i=0;i<4;i++){ 6 a[i]=i+1; 7 } 8 } 9 int main() 10 { 11 init(); 12 int cnt=0; 13 do{ 14 for(int i=0;i<4;i++) 15 printf("%d%c",a[i],i==3?' ':' '); 16 cnt++; 17 }while(next_permutation(a,a+4)); 18 printf("%d ",cnt); 19 return 0; 20 }
1 //从1到n取出m个数 2 #include <iostream> 3 #include <algorithm> 4 #include <cstdio> 5 #include <string> 6 #include <string> 7 #include <cstring> 8 #include <map> 9 #include <utility> 10 using namespace std; 11 const int N = 1e2+20 ; 12 bool vis[N]; 13 int n,m,a[N]; 14 void dfs(int num,int n){ 15 if(num==m+1){ 16 for(int i =1;i<=m;i++) 17 { 18 printf("%d%c",a[i],i==m?' ':' '); 19 } 20 return ; 21 } 22 for(int i =a[num-1]+1;i<=n;i++){ 23 if(!vis[i]){ 24 vis[i]=1; 25 a[num]=i; 26 dfs(num+1,n); 27 vis[i]=0; 28 } 29 } 30 } 31 int main() 32 { 33 while(~scanf("%d%d",&n,&m)){ 34 memset(vis,0,sizeof(vis)); 35 dfs(1,n); 36 } 37 return 0; 38 }
1 //有重复字符的全排列 2 3 #include <cstdio> 4 #include <cstdlib> 5 #include <cstring> 6 #include <iostream> 7 #include <algorithm> 8 using namespace std; 9 const int N=1e3+9; 10 char s[N],buf[N]; 11 int l; 12 bool vis[N]; 13 void dfs(int num){ 14 if(num==l){ 15 printf("%s ",buf); 16 return ; 17 } 18 for(int i =0;i<l;i++){ 19 if(!vis[i]){ 20 int j; 21 for(j=i+1;j<l;j++){ 22 if(vis[j]&&s[i]==s[j]){//重复:先用了s靠后的字符又满足字符一样 23 break; 24 } 25 } 26 if(j==l){ 27 vis[i]=1; 28 buf[num]=s[i]; 29 dfs(num+1); 30 vis[i]=0; 31 } 32 } 33 } 34 35 } 36 int main() 37 { 38 while(~scanf("%s",s)){ 39 memset(vis,0,sizeof(vis)); 40 l =strlen(s); 41 buf[l]='