zoukankan      html  css  js  c++  java
  • [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
    ",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 }
  • 相关阅读:
    for 续1
    8 解决多线程对共享数据出错
    7 多线程 全局变量
    6 线程threading
    5 多进程copy文件
    4 进程间通信Queue [kjuː]
    3 进程池
    2 进程multiprocessing [mʌltɪ'prəʊsesɪŋ] time模块
    1 多任务fork Unix/Linux/Mac
    16 pep8 编码规范
  • 原文地址:https://www.cnblogs.com/elpsycongroo/p/6912331.html
Copyright © 2011-2022 走看看