zoukankan      html  css  js  c++  java
  • 递归打印组合数、搜索模板

    1. //从后往前选取,选定位置i后,再在前i-1个里面选取m-1个。  
    2. //如 1 2 3 4 5 中选取 3 个  
    3. //1、选取5后,再在前4个里面选取2个,而前4个里面选取2个又是一个子问题,递归即可。  
    4. //2、如果不包含5,直接选定4,那么再在前3个里面选取2个,而前三个里面选取2个又是一个子问题,递归即可。  
    5. //3、如果也不包含4,直接选取3,那么再在前2个里面选取2个,刚好只有两个。  
    6. //纵向看,1、2、3刚好是一个for循环,初值为5,终值为m  
    7. //横向看,该问题为一个前i-1个中选m-1的递归。  
    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    # define MAXN 100
    int a[MAXN];
    void comb(int m, int k)
    {
        int i, j;
        if(k<1)
        {
            for (j=a[0]; j>0; j--)//a[a[0]],……,a[1]
                    printf("%4d",a[j]);
            printf("
    ");
            return ;
        }
        for (i = m; i >= k; i--)
        {
            a[k] = i;
            comb(i - 1, k - 1);
        }
    }
    int main()
    {
        int k=4;
        int m=5;
        a[0] = k;
        comb(m,k);//a[0]保持输出的个数
        return 0;
    }

    打印排列数:

    #include<stdio.h>
    #include<string.h>
    int n,m, a[10];
    bool bz[10];//标记数字是否已经被用过
    void DFS(int k)
    {
        if (k==n)//搜出来的长度等于要求的长度,输出该序列,由于是从小到大搜索的所以输出的时候也是从小到大的
        {
            for (int i=0; i<n; i++)
                printf("%d",a[i]);
            printf("
    ");
            return ;
        }
        for (int i=1; i<=m; i++)//不等于要求的长度,继续添加数
        {
            if ( !bz[i] )
            {
                a[k]=i;//将搜索到的数存起来
                bz[i]=true;//标记为已访问
                DFS(k+1);//搜索下一个数
                bz[i]=false;//上一个序列搜索完之后,重新标记为未访问
            }
        }
    }
    
    int main()
    {
        int _case;
        scanf("%d",&_case);
        while(_case--)
        {
            scanf("%d %d",&m,&n);
            memset(bz,false,sizeof(bz));
            DFS(0);//从第一位开始搜索
        }
        return 0;
    
    }

     迷宫搜索类题目模板

  • 相关阅读:
    KVM(Keyboard、Video、Mouse)
    javascript valueof
    javascript的typeof的返回值
    javascript的===和==
    WGestures全局鼠标手势工具
    向win+x快捷目录添加功能
    好用的影子系统软件
    备份任务栏
    修改多个调用提示最小值_改变多选右键菜单
    执行Windows Update更新
  • 原文地址:https://www.cnblogs.com/XDJjy/p/7364884.html
Copyright © 2011-2022 走看看