关闭

算法学习——dfs篇——蒜头学算数

标签: 算法
62人阅读 评论(0) 收藏 举报
分类:
#include <bits/stdc++.h>
using namespace std;
int n; // 保存读入的整数N
bool opr[10]; // 可以用一个bool数组保存所有n-1个符号,我们用true表示加号"+",用false表示减号"-"。
bool found = false; // 表示是否找到一组解,如果没找到的话需要在最后输出"None"
// dfs函数,保存两个状态:deep表示递归深度,就是枚举到第几个数字左边的符号;sum表示之前部分表达式的值。
// 如果枚举完成后sum的值刚好为0,则输出这组方案。我们需要在搜索的过程中用opr数组保存状态。
void dfs(int deep, int sum) {
    // 请在下面的条件表达式中填上对应的值。
    if (deep == n) {
        if (sum == 0) {
            found = true;
            // 请在下面将最终方案输出,方案格式参照题目描述。
            // 最后记得换行哦。
            for(deep=1;deep<=n;deep++){
                if(deep==n)
                    printf("%d",deep);
                else if(opr[deep]==true){
                    printf("%d",deep);
                    printf("+");}
                else if(opr[deep]==false){
                    printf("%d",deep);
                    printf("-");}
            }
                printf("\n");
        }
        return ;
    }
    // 请在下面的语句中填出正确的逻辑。
    opr[deep] = true;
    dfs(deep+1,sum+deep+1);
    opr[deep] = false;
    dfs(deep+1,sum-deep-1);
}

// main函数请自己完成哦,加油~
int main() {
    scanf("%d",&n);
    dfs(1,1);
    if(found==false){
        printf("None");
    }
    return 0;
}
//此题是一道典型的深度搜索题型,状态之间的不断转移,dfs(1,1)是第一个状态,如果+则第二个状态是dfs(2,3),以此类推,故循环体的  sum = 前一个sum  + 或  -  当前的deep(上一个deep+1)
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:88次
    • 积分:20
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档