zoukankan      html  css  js  c++  java
  • nyoj_19_擅长排列的小明_201403011600

    擅长排列的小明
    时间限制:1000 ms  |  内存限制:65535 KB
    难度:4
    描述
    小明十分聪明,而且十分擅长排列计算。比如给小明一个数字5,他能立刻给出1-5按字典序的全排列,如果你想为难他,在这5个数字中选出几个数字让他继续全排列,那么你就错了,他同样的很擅长。现在需要你写一个程序来验证擅长排列的小明到底对不对。
    输入
    第一行输入整数N(1<N<10)表示多少组测试数据,
    每组测试数据第一行两个整数 n m (1<n<9,0<m<=n)
    输出
    在1-n中选取m个字符进行全排列,按字典序全部输出,每种排列占一行,每组数据间不需分界。如样例
    样例输入
    2
    3 1
    4 2样例输出
    1
    2
    3
    12
    13
    14
    21
    23
    24
    31
    32
    34
    41
    42
    43来源
    [hzyqazasdf]原创
    上传者
    hzyqazasdf

     1 #include <stdio.h>
     2 #include <string.h>
     3 int n,m;
     4 bool vis[12];   //标记是否被用过 
     5 int res[12];    //存放结果 
     6 void output()   //输出函数 
     7 {
     8     int i;
     9     for(i=0;i<m;i++)
    10     printf("%d",res[i]);
    11     printf("
    ");
    12 }
    13 void dfs(int step)   //递归求序列 
    14 {
    15     int i,j;
    16     if(step==m)     //满足深度时输出   
    17     output();
    18     else
    19     {
    20         for(i=0;i<n;i++)
    21         {
    22             if(!vis[i]) //如果i没有被用过  
    23             {
    24                 vis[i]=1;       //用过后标记为用过  
    25                 res[step]=i+1;  //存入数组,待会儿输出 
    26                 dfs(step+1);    //继续找下一位数 
    27                 vis[i]=0;       //函数返回后就以为着回到上一次的for循环,那么这次的i定将被释放(不用),那么标记为没用过  
    28             }
    29         }
    30     }
    31 }
    32 int main()
    33 {
    34     int T;
    35     scanf("%d",&T);
    36     while(T--)
    37     {
    38         memset(vis,0,sizeof(vis));
    39         scanf("%d %d",&n,&m);
    40         dfs(0);
    41     }
    42     return 0;
    43 }
  • 相关阅读:
    【LeetCode】N数和
    用PHP写一个双向队列
    PHP的几种遍历方法
    thinkphp中dump()方法
    【转】PHP对象在内存中的分配
    【转】PHP的执行原理/执行流程
    从头到尾彻底解析哈希表算法
    【转】TCP通信的三次握手和四次撒手的详细流程(顿悟)
    springmvc中拦截器的定义和配置
    springmvc中的异常处理方法
  • 原文地址:https://www.cnblogs.com/xl1027515989/p/3575219.html
Copyright © 2011-2022 走看看