递归打印组合数、搜索模板

  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("\n");
        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;
}

迷宫搜索类题目模板

时间: 2025-01-02 11:20:56

递归打印组合数、搜索模板的相关文章

递归之深度优先搜索

递归的思想在写程序中运用较为广泛,看视很复杂的问题,通常通过递归思想找出"递归结构",分解成重复的小步骤即可解决,但是递归的思想有时并不好理解(大佬,悟性高的忽略).本文通过介绍全排序例子介绍递归思想,最后给出前一次博客写的"坑爹的奥数"问题进行递归优化,给出执行时间. 一.问题描述:假如有编号为1.2.3的3张扑克牌和编号为1.2.3的3个盒子.现在需要将这3张扑克牌分别放到3个盒子里面,并且每个盒子有且只有一张扑克牌.那么一共有多少种不同的放法呢? 当有n个数字

Shell脚本递归打印指定文件夹中全部文件夹文件

#!/bin/bash #递归打印当前文件夹下的全部文件夹文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$line ] && { DIR="$1/$line" echo $DIR } DIR1=`dirname $DIR` #求路径. A=`ls -F $DIR1 | grep / | grep "\<$line\>"` #推断line是不是一个文件

Shell脚本递归打印指定目录中所有目录文件

#!/bin/bash #递归打印当前目录下的所有目录文件. PRINTF() { ls $1 | while read line #一次读取每一行放到line变量中 do [ -d $1/$line ] && { DIR="$1/$line" echo $DIR } DIR1=`dirname $DIR` #求路径. A=`ls -F $DIR1 | grep / | grep "\<$line\>"` #判断line是不是一个目录.

UVA1626 - Brackets sequence(区间DP--括号匹配+递归打印)

题目描述: 定义合法的括号序列如下: 1 空序列是一个合法的序列 2 如果S是合法的序列,则(S)和[S]也是合法的序列 3 如果A和B是合法的序列,则AB也是合法的序列 例如:下面的都是合法的括号序列 (),  [],  (()),  ([]),  ()[],  ()[()] 下面的都是非法的括号序列 (,  [,  ),  )(,  ([)],  ([(] 给定一个由'(',  ')',  '[', 和 ']' 组成的序列,找出以该序列为子序列的最短合法序列. 思路:真是经典的题目,区间DP

Lua非常有用的工具——递归打印表数据

Lua是一种非常小巧的语言.虽小,但五脏俱全. 在Lua中,我认为最最核心的数据结构就是表.表不仅可用作数组,还可以用作字典.Lua面向对象的实现也是用表实现的. 表对于Lua实在是太重要了!所以,在开发与调试过程中,让表可视化是非常迫切的需求.可Lua标准库里没有递归显示表中所有数据的函数. 于是,凭着对Lua的兴趣,我写了一个函数用于递归打印表中所有的数据. 废话不多话,如下为源代码: -----------------------------------------------------

递归打印lua中的table

递归打印lua中的table,并写到文件里: 1 local pairs_by_keys = function(inTable) 2 local temp = {} 3 for k, v in pairs(inTable) do 4 temp[#temp + 1] = k 5 end 6 7 local compare = function(a, b) 8 if type(a) == type(b) then 9 return a < b 10 elseif type(a) == "num

DP(递归打印路径) UVA 662 Fast Food

题目传送门 题意:n个饭店在一条直线上,给了它们的坐标,现在要建造m个停车场,饭店没有停车场的要到最近的停车场,问所有饭店到停车场的最短距离 分析:易得区间(i, j)的最短距离和一定是建在(i + j) / 2的饭店,预处理出(i, j)的距离和sum[i][j],mark[i][j] 表示区间的最优停车场的位置,mid[i][j]表示(i + j) / 2.状态转移方程:dp[i][j] = max (dp[k-1][j-1] + sum[k][i]): 收获:学习递归打印路径 代码: /*

【ACM - 搜索模板】

[广搜模板] #include <iostream> #include <stdio.h> #include <string.h> #include <queue> using namespace std; #define MAXX #define MAXY struct Node{ int x,y; int step; }; int n,m; //边界 int dx[4] = {0,1,0,-1}; int dy[4] = {1,0,-1,0}; int

递归打印级联目录

<?php /**递归打印级联目录**/ function read_dir($path){ static $dir_i = 0; $pre = ''; $dh = opendir($path); for($a=0; $a<$dir_i; $a++) $pre .= "&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&