【错题集-编程题】体操队形(DFS + 枚举)

简介: 【错题集-编程题】体操队形(DFS + 枚举)

牛客对应题目链接:体操队形 (nowcoder.com)


一、分析题目

经验:因为数据量小,可以通过递归来做。

画出决策树,注意剪枝策略。


二、代码

//值得学习的代码
#include <iostream>
 
using namespace std;
 
const int N = 15;
 
int ret;
int n;
bool vis[N];
int arr[N];
 
void dfs(int pos)
{
    if(pos == n + 1) // 找到⼀种合法⽅案
    {
        ret++;
        return;
    }
 
    for(int i = 1; i <= n; i++)
    {
        if(vis[i]) continue; // 当前 i 已经放过了 - 剪枝
        if(vis[arr[i]]) return; // 剪枝
        vis[i] = true; // 相当于放上 i 号队员
        dfs(pos + 1);
        vis[i] = false; // 回溯- 还原现场
    }
}
 
int main()
{
    cin >> n;
    for(int i = 1; i <= n; i++) cin >> arr[i];
 
    dfs(1);
 
    cout << ret << endl;
 
    return 0;
}

三、反思与改进

这道题真就一点思路也没有,看着数据量很小,想着模拟试试看,发现根本行不通。下次看到数据量小,可以尝试递归,暴力搜索来解决问题。


相关文章
|
7月前
|
C语言
c语言编程练习题:7-4 输出菱形图案
本题要求编写程序,输出指定的由“A”组成的菱形图案。
91 0
|
7月前
|
C语言
c语言编程练习题:7-5 输出倒三角图案
本题要求编写程序,输出指定的由“*”组成的倒三角图案。
112 0
|
6月前
|
C语言
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
C语言学习记录——鹏哥扫雷项目实现及递归展开、记录雷坐标
77 0
|
7月前
【编程题-错题集】分组(枚举 + 二分)
【编程题-错题集】分组(枚举 + 二分)
|
7月前
|
C语言
c语言编程练习题:7-59 打印菱形图案
c语言编程练习题:7-59 打印菱形图案
82 0
|
存储 算法 容器
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
精选算法题(1)——枚举符合要求的算术表达式(DFS、回溯法)
|
人工智能 算法 测试技术
[蓝桥杯] 枚举、模拟和排列问题
[蓝桥杯] 枚举、模拟和排列问题
83 0
|
C语言
C语言实例:创建各类三角形图案(杨辉三角,弗洛伊德三角形....)
C语言实例:创建各类三角形图案(杨辉三角,弗洛伊德三角形....)
164 0