DFS(深度优先搜索)

简介

深度优先搜索(DFS,Depth-First Search)是搜索的手段之一。它从某个状态开始,不断的转移状态直到无法转移。然后退回到前一步的状态,继续转移到其他状态,如此不断地重复直到找到最后的解。

样例一

题目

部分和问题

给定整数a1,a2----an,判断是否可以从中选出若干数,判断是否存在几个数或某个数和恰为k

分析

对于本题来说只需判断两种状态加与不加,如果此状态满足和为k返回sum==k

代码 O(2 ^n)

//输入
int a[MAX_N];
int n,k; bool dfs(int i , int sum){
if (sum == k) return sum == k; //如果和为k返回 //不加上a[i]
if(dfs(i+1,sum)) return ture; // 加上a[i]
if(dfs(i+1),sum+a[i]) return ture; // 不能凑成k就返回false
return flase;
} void solve(){
if(dfs(0,0)) cout << "Yes" <<endl;
else cout << "No" ;
}

样例二

Acwing 842. 排列数字

给定一个整数 nn,将数字 1∼n1∼n 排成一排,将会有很多种排列方法。

现在,请你按照字典序将所有的排列方法输出。

输入格式

共一行,包含一个整数 nn。

输出格式

按字典序输出所有排列方案,每个方案占一行。

数据范围

1≤n≤71≤n≤7

输入样例:

3

输出样例:

1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

代码

#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10 ;

int path[N]; //表示路径
bool use[N]; // 判断数字是否被用过
int n ; void dfs(int x)
{
if (x == n) { //若找到的数字位数等于所需,直接输出结果
for (int i = 0; i < n; i ++ ) cout << path[i] << " " ;
cout << endl ;
return ;
} for (int i = 1; i <= n; i ++ ) { // 从 i = 1 开始寻找
if (!use[i]){ //如果i 没有被用过时
path[x] = i ; // 将 i 赋给 path
use[i] = 1 ; // 标记i被用过了
dfs(x + 1); // 寻找下一个数
use[i] = 0 ; // 寻找完恢复i
}
}
} int main()
{
cin >> n;
dfs(0);
return 0;
}

《挑战程序设计竞赛》——DFS的更多相关文章

  1. BZOJ 3083: 遥远的国度 [树链剖分 DFS序 LCA]

    3083: 遥远的国度 Time Limit: 10 Sec  Memory Limit: 1280 MBSubmit: 3127  Solved: 795[Submit][Status][Discu ...

  2. BZOJ 1103: [POI2007]大都市meg [DFS序 树状数组]

    1103: [POI2007]大都市meg Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 2221  Solved: 1179[Submit][Sta ...

  3. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  4. 图的遍历(搜索)算法(深度优先算法DFS和广度优先算法BFS)

    图的遍历的定义: 从图的某个顶点出发访问遍图中所有顶点,且每个顶点仅被访问一次.(连通图与非连通图) 深度优先遍历(DFS): 1.访问指定的起始顶点: 2.若当前访问的顶点的邻接顶点有未被访问的,则 ...

  5. BZOJ 2434: [Noi2011]阿狸的打字机 [AC自动机 Fail树 树状数组 DFS序]

    2434: [Noi2011]阿狸的打字机 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 2545  Solved: 1419[Submit][Sta ...

  6. POJ_2386 Lake Counting (dfs 错了一个负号找了一上午)

    来之不易的2017第一发ac http://poj.org/problem?id=2386 Lake Counting Time Limit: 1000MS   Memory Limit: 65536 ...

  7. 深度优先搜索(DFS)

    [算法入门] 郭志伟@SYSU:raphealguo(at)qq.com 2012/05/12 1.前言 深度优先搜索(缩写DFS)有点类似广度优先搜索,也是对一个连通图进行遍历的算法.它的思想是从一 ...

  8. 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序

    3779: 重组病毒 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 224  Solved: 95[Submit][Status][Discuss] ...

  9. 【BZOJ-1146】网络管理Network DFS序 + 带修主席树

    1146: [CTSC2008]网络管理Network Time Limit: 50 Sec  Memory Limit: 162 MBSubmit: 3495  Solved: 1032[Submi ...

  10. 【Codeforces163E】e-Government AC自动机fail树 + DFS序 + 树状数组

    E. e-Government time limit per test:1 second memory limit per test:256 megabytes input:standard inpu ...

随机推荐

  1. 线程休眠_sleep

    线程休眠_sleep sleep(时间)指定当前线程阻塞的毫秒数: sleep存在异常InterruptedException: sleep时间到达后线程进入就绪状态: sleep可以模拟网络延时,倒 ...

  2. 使用Windows客户端连接Linux系统中的MySQL时产生的错误已经解决

    .personSunflowerP { background: rgba(51, 153, 0, 0.66); border-bottom: 1px solid rgba(0, 102, 0, 1); ...

  3. xml editing in vi

    Auto complete tags xmledit installation: git clone https://github.com/sukima/xmledit.git, then make ...

  4. Java 多线程与并发【知识点笔记】

    Java 多线程与并发[知识点笔记] Java多线程与并发 先说一下线程与进程的由来: 在初期的计算机,计算机只能串行执行任务,并且需要长时间的等待用户的输入才行 到了后来,出现了批处理,可以预先将用 ...

  5. spring security整体流程

    spring-security原理 图片中各个类的作用: 1JwtUser类:实现Springsecurity的UserDetails类,此类必须有三个属性 private String userna ...

  6. AWD比赛组织指南

    目录 题目构建 平台构建 后端部署流程 前端展示 批量启动 check 题目构建 赛题全部使用docker部署,需准备check脚本和镜像 镜像构建注意事项 1.注意web目录权限 2.注意服务是否自 ...

  7. 一张图带你搞懂Node事件循环

    说一件重要的事儿:你还没关注公众号[前端印记],更多精彩内容等你探索-- 以下全文7000字,请在你思路清晰.精力充沛的时刻观看.保证你理解后很长时间忘不掉. Node事件循环 Node底层使用的语言 ...

  8. COM笔记-动态链接

    在实现了IUnknown之后,组件和客户之间只是一种非常松散的连接,这使用组件和客户各自可以发生变化而不会对对方造成什么影响. 下面讨论如何将组件放入到动态链接库(dll)中. 关于DLL更多内容可以 ...

  9. asp.net core 声明controller的方法

    1, 对类名直接添加Controller, 如TestController. 2,  继承Controller 类. 3, 对类名添加controller的属性, 如[Controller]

  10. 【gdal】创建GeoTiff栅格数据

    1 //定义转换参数 2 private readonly double[] d_transform = { 69.999999999999972, 0.01, 0.0, 44.99999999999 ...