[51nod1384]全排列

法一:next_permutation函数,两个参数分别为起始指针和末尾指针。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 char arr[19];
 5 int main(){
 6     scanf("%s",arr);
 7     int len=strlen(arr);
 8     sort(arr,arr+len);
 9     char *s=arr,*t=arr+len;
10     do{
11         printf("%s\n",arr);
12     }while(next_permutation(s,t));
13 }

法二:dfs

注意全排列一共有$n!$种,所以num数组一定要开的够大。

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 char arr[100];
 5 char brr[100];
 6 string num[720000];
 7 bool v[100];
 8 int n;
 9 int k=0;
10 void dfs(int t){
11     if(t>=n){
12         num[k++]=brr;
13         return;
14     }
15     
16     for(int i=0;i<n;i++){//dfs必须多加熟悉 
17         if(!v[i]){
18             v[i]=true;
19             brr[t]=arr[i];
20             dfs(t+1);
21             v[i]=false;
22         }
23     }
24 }
25 int main(){
26     scanf("%s",arr);
27     n=strlen(arr);
28     //sort(arr,arr+n);
29     //这里不必排,因为最后肯定要排 
30     dfs(0);
31     sort(num,num+k);  //这里必须排序 
32     int m=unique(num,num+k)-num;
33     for(int i=0;i<m;i++){
34         cout<<num[i]<<endl;
35     }
36 }

 

posted @ 2017-05-27 12:13  Elpsywk  阅读(195)  评论(0编辑  收藏  举报