《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)
http://codeup.cn/contest.php
5972
这是递归的入门题,求全排列,第一种方法用STL中的函数next_permutation,可以很容易的实现。首先建立好数组,将需要全排列的数字进行初始化,然后调用next_permutation(a,a+n),按照地址进行全排列打印结果.
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[];
int main()
{
int n;
scanf("%d", &n);
int i;
for (i = ; i < n; i++)
{
a[i] = i + ;
}
do
{
for (i = ; i < n; i++)
{
if (i != n - )
printf("%d ", a[i]);
else
printf("%d", a[i]);
}
printf("\n");
} while (next_permutation(a, a + n));
}
2.另外一种递归写法如下。
#include <bits/stdc++.h>
using namespace std;
vector<int>ans;
bool hashTable[] = { false };//true选false不选
int i;
int n;
void DFS(int index)
{
if (index == n)
{
for (i = ; i < n; i++)
{
if (i != n - )
printf("%d ", ans[i]);
else
printf("%d", ans[i]);
}
printf("\n");
return;
}
for (int x = ; x < n; x++)
{
if (hashTable[x] == false)
{
ans.push_back(x+);//选这个元素
hashTable[x] = true;//将他设置为已选择
DFS(index + );//不选这个元素
ans.pop_back();//弹出
hashTable[x] = false;//把这个元素设置为未选择
}
}
}
int main()
{
scanf("%d", &n);
DFS();
}
5973
和这个题很像,求的是组合,也是DFS递归模板的另一版本.
#include <cstdio>
#include <vector>
using namespace std;
int n, r;
int a[];
vector<int>ans;
void DFS(int index, int v)
{
if (index == n)
{
if (v == r)
{
vector<int>::iterator it = ans.begin();
for (; it != ans.end(); it++)
{
if (it != ans.end() - )
{
printf("%d ", *it);
}
else
printf("%d", *it);
}
printf("\n");
}
return;
}
ans.push_back(a[index]);
DFS(index + , v + );
ans.pop_back();
DFS(index + , v);
}
int main()
{
scanf("%d %d", &n, &r);
int i;
for (i = ; i < n; i++)
{
a[i] = i + ;
}
DFS(, );
}
《算法笔记》8.1小节——搜索专题->深度优先搜索(DFS)的更多相关文章
- python实现广度优先搜索和深度优先搜索
图的概念 图表示的是多点之间的连接关系,由节点和边组成.类型分为有向图,无向图,加权图等,任何问题只要能抽象为图,那么就可以应用相应的图算法. 用字典来表示图 这里我们以有向图举例,有向图的邻居节点是 ...
- 【数据结构与算法Python版学习笔记】图——骑士周游问题 深度优先搜索
骑士周游问题 概念 在一个国际象棋棋盘上, 一个棋子"马"(骑士) , 按照"马走日"的规则, 从一个格子出发, 要走遍所有棋盘格恰好一次.把一个这样的走棋序列 ...
- 总结A*,Dijkstra,广度优先搜索,深度优先搜索的复杂度比较
广度优先搜索(BFS) 1.将头结点放入队列Q中 2.while Q!=空 u出队 遍历u的邻接表中的每个节点v 将v插入队列中 当使用无向图的邻接表时,复杂度为O(V^2) 当使用有向图的邻接表时, ...
- [算法专题] 深度优先搜索&回溯剪枝
1. Palindrome Partitioning https://leetcode.com/problems/palindrome-partitioning/ Given a string s, ...
- DFS+BFS(广度优先搜索弥补深度优先搜索遍历漏洞求合格条件总数)--09--DFS+BFS--蓝桥杯剪邮票
题目描述 如下图, 有12张连在一起的12生肖的邮票.现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) 比如,下面两张图中,粉红色所示部分就是合格的剪取. 请你计算,一共有多少 ...
- "《算法导论》之‘图’":深度优先搜索、宽度优先搜索(无向图、有向图)
本文兼参考自<算法导论>及<算法>. 以前一直不能够理解深度优先搜索和广度优先搜索,总是很怕去碰它们,但经过阅读上边提到的两本书,豁然开朗,马上就能理解得更进一步. 下文将会用 ...
- matlab练习程序(广度优先搜索BFS、深度优先搜索DFS)
如此经典的算法竟一直没有单独的实现过,真是遗憾啊. 广度优先搜索在过去实现的二值图像连通区域标记和prim最小生成树算法时已经无意识的用到了,深度优先搜索倒是没用过. 这次单独的将两个算法实现出来,因 ...
- HDU(搜索专题) 1000 N皇后问题(深度优先搜索DFS)解题报告
前几天一直在忙一些事情,所以一直没来得及开始这个搜索专题的训练,今天做了下这个专题的第一题,皇后问题在我没有开始接受Axie的算法低强度训练前,就早有耳闻了,但一直不知道是什么类型的题目,今天一看,原 ...
- 深度优先搜索 DFS 学习笔记
深度优先搜索 学习笔记 引入 深度优先搜索 DFS 是图论中最基础,最重要的算法之一.DFS 是一种盲目搜寻法,也就是在每个点 \(u\) 上,任选一条边 DFS,直到回溯到 \(u\) 时才选择别的 ...
随机推荐
- Book118免费下载文档方法
在book118上下载文件时,对于小文件可以使用冰点文库下载器来下载,而对于大文件,则可以使用下面的方法: 需要用的工具: 1.360浏览器 2.点“全屏预览”,然后把鼠标放在“下载该文档”,右键“审 ...
- /usr/bin/ld: 找不到 -lmsc----解决方案
系统的默认搜索依赖库路径为,/usr/local/lib 在camkelists.txt文件中对可执行文件链接libmsc.so add_executable(iat_publish src/iat_ ...
- MySQL之多表查询一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习
MySQL之多表查询 阅读目录 一 介绍 二 多表连接查询 三 符合条件连接查询 四 子查询 五 综合练习 一 介绍 本节主题 多表连接查询 复合条件连接查询 子查询 首先说一下,我们写项目一般都会建 ...
- Will vs Be Going To vs Present Continuous: Talk About the Future in English
https://www.youtube.com/watch?v=UISiuiPd_FY will 说话的当下决定的将来要做什么,in the moment be going to 有意图去做,但没有计 ...
- 2015年蓝桥杯省赛A组c++第5题(回溯算法填空)
/* 1,2,3…9 这九个数字组成一个分数,其值恰好为1/3,如何组法? 下面的程序实现了该功能,请填写划线部分缺失的代码. */ #include <stdio.h> void tes ...
- 20个有趣的Linux命令
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- [daily][qemu][libvirt] 使用libvirt管理qemu
别人创建的虚拟机.用libvirt做的配置. 我一直是手写qemu脚本的,不会用virtsh,所以,学一下. ------------------ 先来个arch的文档: https://wiki.a ...
- [development][endian] 字节序
首先字节序很不好理解, 其次,理解了又不好记住. 除了字节序, 还有位序. 那么到底怎么记住呢? 大端序,小端序还有另一个名字, 大尾序,小尾序. 这样就记住了, 我们以16进制打印一个数之后, 尾部 ...
- LeetCode 893 Groups of Special-Equivalent Strings 解题报告
题目要求 You are given an array A of strings. Two strings S and T are special-equivalent if after any nu ...
- 《mongoDB》基本操作-创建/更新/删除文档
一:基本操作 - db; 当前选择的集合(等于数据库名) > db demo - use db_name; 选择你要操作的集合 > use demo switched to db dem ...