标签:
先说说这个神秘的深搜:
前几天我心中的大牛给我讲了深搜感觉还是挺简单的,可大牛告诉我深搜深搜深的让你不知道怎么搜
我们也是从一道题来看:n的全排列
比如说3的全排列
123
213
321
这就是全排列 在没学过深搜的时候我们会用for循环来做这道题 但是如果n很大的时候就不行了
所以我们就一定要深搜了 其实在我看来深搜和递归是亲兄弟 深搜就是递归的加强版
我先写一个简单的dfs(深搜)函数的代码
#include<stdio.h> int dfs(int x) { if(x > n) { for(i = 0;i < n;i++) { printf("%d ",b[i]); //b[i]是记录全排列里面的数字的 return; } } for(i = 1;i <= n;i++) { if(a[i].biaozhi) //a[i].biaozhi 是看i用没用过如果用过了就contin { a[i].biaozhi = 1; //1表示用过了 初始化的时候把biaozhi弄成0 dfs(x + 1); //每个x表示第几位的数字 如果这位填完了 那么我们就填下一位知道能输出位置 a[i].biaozhi = 0; //完事我们要把标志弄回来 以便下一次用 } } }
其实深搜的含义就是一直找一直找 直到找到一个符合条件的结果 然后返回上一个dfs继续找
广搜:
大牛告诉我广搜比深搜简单的很多,可我感觉我广搜真的不行,我先给你们说说广搜的含义 其实广搜就是一个队列 就是先进去的先搜 后进去的后搜
理解这个 广搜就会变的容易
标签:
原文地址:http://www.cnblogs.com/zhanyage110/p/4394746.html