DFS入门篇---蓄势待发!
来源:互联网 发布:趣图软件下载 编辑:程序博客网 时间:2024/06/04 00:56
深度优先搜索(DFS,Depth-First-Search)是搜索的手段之一。不断的向所有可能的状态转移直到无法转移,然后回退到前一步的状态,继续转移到其他状态,如此不断重复,直到找到最终的解。掌握DFS对于OIers来说就像战场上的士兵会开枪一样是基本技能而不是制胜法宝......Let's start the first step!
全排列生成算法
简介:从n个元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列,A(n,n)= n !。
下面以生成1~n的自然数的全排列为例,介绍DFS递归算法,按照字典序输出:
1,不断地从1~n中选取第一个没有被使用过的数,放入一个数组中储存。
2,不断重复第1步,直到n个数都选完了,输出数组中的一组排列,同时退回上一步。
事实上,STL的bool next_prmutation(first iterator,last iterator),生成当前排列字典序的下一个排列,成功返回true,通过他也能生成全排列
#include<bits/stdc++.h>using namespace std;bool is_v[20]={0};int m[20],n;//输出保存的一组排列 void Pm(void){for(int g=0;g<n;g++) printf("%d ",m[g]);putchar('\n');}//正在考虑第i个数,打算填入num void dfs(int i,int num){if(i==n){Pm();return;}is_v[num]=1;//记这个数已使用过 for(int p=1;p<=n;p++){if(is_v[p]==0){m[i]=p;//放入数组m中储存 dfs(i+1,p);//下一个 } }is_v[num]=0;//所有以num开头的可能都试过了,复位并回到上一步 }int main(){scanf("%d",&n);dfs(0,0);return 0;}
阅读全文
1 0
- DFS入门篇---蓄势待发!
- DFS入门篇---回溯!
- DFS入门篇---八皇后!
- DFS入门
- 入门DFS
- dfs入门
- DFS入门
- DFS 入门
- 挑战程序设计竞赛 —— 蓄势待发(准备篇)
- DFS入门题
- acm-dfs入门
- hdu1241(DFS入门)
- 算法入门之DFS
- hdu 1241--入门DFS
- dfs入门hdoj1016题解
- DFS入门__poj1979
- POJ1416--DFS入门
- dfs入门(2)
- ABP官方文档翻译 1.4 启动配置
- java 序列化Serializable与反序列化DeSerializable
- 水文、水利相关期刊
- FZU 2088
- ABP官方文档翻译 1.3 模块系统
- DFS入门篇---蓄势待发!
- vue 中 v-if 和 v-show 的区别
- axure原型设计之tab选项卡
- 建库,建表
- ABP官方文档翻译 1.2 N层架构
- eclipse下执行maprdeuc程序报错 java.lang.ClassNotFoundException
- JAVA-1016. 部分A+B (15)
- Linux基础学习笔记之Centos6,Centos7修改时区
- 多线程和虚拟机?