• 51Nod-1384 全排列 (DFS)


    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注
    给出一个字符串S(可能有重复的字符),按照字典序从小到大,输出S包括的字符组成的所有排列。例如:S = "1312",
    输出为:
     
    1123
    1132
    1213
    1231
    1312
    1321
    2113
    2131
    2311
    3112
    3121
    3211
    Input
    输入一个字符串S(S的长度 <= 9,且只包括0 - 9的阿拉伯数字)
    Output
    输出S所包含的字符组成的所有排列
    Input示例
    1312
    Output示例
    1123
    1132
    1213
    1231
    1312
    1321
    2113
    2131
    2311
    3112
    3121
    3211
    题意:= =、全排列。
    个人理解:先用flag[10]数组把0-9的数的个数存储一下。然后用DFS选择每个位子选什么数,记得需要回溯。
    更多的解释都在下面代码中。非常好理解
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 using namespace std;
     5 int flag[10];
     6 int number1[15]; 
     7 void DFS(int number,int S)//(数组中有几个数,总共有几个数) 
     8 {
     9     for (int i=0;i<10;i++)
    10     {
    11         if(flag[i]>0)//表示有这个数
    12         {
    13             flag[i]--;//消耗这个数 
    14             number1[number]=i;//把这个数放入数组
    15             number++;//数组中有几个数
    16             if(number==S)//数组中的数满了,表明已经选择完毕,则直接把数组中的数输出 
    17             {
    18                 for (int q=0;q<number;q++)
    19                 {
    20                     if(q!=number-1)
    21                     printf("%d",number1[q]);
    22                     else
    23                     printf("%d
    ",number1[q]);
    24                 }
    25              }
    26             DFS(number,S);
    27             number--;//回溯 
    28             flag[i]++;//回溯 
    29         }
    30     }
    31 }
    32 int main()
    33 {
    34     char s[10];
    35     scanf("%s",s);
    36     memset(flag,0,sizeof(flag));
    37     int len=strlen(s);
    38     for (int i=0;i<len;i++)
    39     flag[s[i]-'0']++;//存储0-9每个数的个数 
    40     DFS(0,len);
    41     return 0;
    42 }
    
    
    



  • 相关阅读:
    OGG for sqlserver engryption && insert/delete
    MySQL中SQL_CALC_FOUND_ROWS的用法
    VMWARE 虚拟机新增硬盘,格式化分区,并挂载
    Mycat实战之数据迁移(oracle -- mysql)
    MYCAT实战之分片迁移
    mycat实战之性能测试
    Mycat实战之主键数据库自增方式
    对象的创建与克隆
    c#调用c++的dll,错误篇
    java 模拟消息的发送功能
  • 原文地址:https://www.cnblogs.com/bendandedaima/p/9304850.html
Copyright © 2020-2023  润新知