dfs深度优先搜索 1~N 的排列理解dfs,抽象为n个数放n个盒子
2016-04-02 10:30
501 查看
复制代码 输入3,4,5 看看
#include <stdio.h> #include <iostream> #include <string.h> #include <math.h> #include <cstdlib> #include <algorithm> using namespace std; int a[101]; //假定最多100个数 int b[101]; //记录是否用过,用过标记1,没有过标记0 int n; void dfs(int step){ if(step==n+1){ //到n+1个盒子面前表明1~n已经排完 for(int j=1;j<=n;j++){ printf("%d ",a[j]); } printf("\n"); return; } for(int i=1;i<=n;i++){ if(!b[i]){ a[step]=i; //第step个盒子放入数i b[i]=1; //数i用过 标记1 dfs(step+1); //下一个 b[i]=0; //将放入的收回进行下一次尝试 } } return; } int main(){ memset(b,0,sizeof(b)); //数组b[]初始化为0 while(~scanf("%d",&n)){ dfs(1); //从第1个盒子开始放 } return 0; }
相关文章推荐
- HDU 1863 畅通工程 最小生成树
- HDU 1863 畅通工程 最小生成树
- Linux系统编程——进程间通信:命名管道(FIFO)
- Make 命令教程
- django-总结
- java基本知识点(二)
- 使用bitmap
- 项目4——长方形类
- Android 消息循环机制源码分析
- 细说GCD(Grand Central Dispatch)如何用
- delphi实现函数/过程
- How to upgrade Git to latest version on Mac OS X?
- 【位运算】【codeforces】631A Interview
- JDBC-数据库连接代码优化二
- 关于magento的皮肤制作
- String的split()方法探索和大揭秘
- SQL笔记
- PhotoView问题 ImageView no longer exists.
- 沼泽鳄鱼
- 程序员:如何能巧妙地“接私活儿”