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

原创 2015年11月18日 19:07:20
#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)

零碎的数据结构与算法——Dijkstra双栈算数表达式求解

偶然翻书看到这个算法,感觉很有意思,就姑且简单实现了一下。代码如下 package com.syh.algorithm; import java.util.Scanner; import java....

【计蒜客】基础算法入门之深度搜索(2)蒜头学算术d

很想写一个很好的文章引子,但是囿于语文水平有限,写不出什么好东西来,干脆就随便写点东西吧。之前写的文章都是关于爬虫的,爬虫虽好,但是写来写去就是那些东西,是时候学习点新东西了!现在自己很缺关于算法的知...

【打CF,学算法——二星级】CodeForces 96B Lucky Numbers (构造/dfs)

题目链接:CF 96B 题面: B. Lucky Numbers (easy) time limit per test 2 seconds memory limit per t...

【打CF,学算法——三星级】CodeForces 615B Longtail Hedgehog (DFS/拓扑排序)

题目链接:CF 615B 题面: B. Longtail Hedgehog time limit per test 3 seconds memory limit per test 2...

PHP学习笔记——算数运算符号;

/* 算术运算符号 + - * / % ++ -- * 除数不能为零0 * 在其它语言中(不是在PHP中),+号除了有加法的作用,还有连接字符串的功能 ...
  • iheyu
  • iheyu
  • 2017年03月16日 11:48
  • 126

Shell学习笔记——算数运算与条件测试

算数运算 1. 使用let命令    #!/sbin/bash var1=2 var2=3 let sum=var1+var2 echo $sum 使用let命令式,变量前不...
  • Windeal
  • Windeal
  • 2014年09月15日 10:17
  • 1273

poj2488——dfs深度优先遍历

  • 2013年07月24日 10:21
  • 2KB
  • 下载

hud 1010 (Tempter of the Bone)——dfs(深度优先搜索算法)

Tempter of the Bone Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法学习——dfs篇——蒜头学算数
举报原因:
原因补充:

(最多只允许输入30个字)