DFS

Posted tyxmax

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DFS相关的知识,希望对你有一定的参考价值。

DFS
优先向搜索树深层搜索的搜索算法,对于一个合法的状态A,对于其所有的子状态(搜索树的儿子结点)选择一种进行探索
递归这一过程,直至达到叶子结点或目前状态不合法则回溯至父亲结点,对另一种子状态进行搜索
void DFS(状态A)
      if(A不合法) return;//返回父亲结点或者不做任何操作 
      if(A为目标状态) 输出或者记录;
      if(A不为目标状态) DFS(A+Δ);//递归调用搜索其中的一个子节点

典型实例1——n皇后问题

 1 #include<iostream>
 2 using namespace std;
 3 int n;//皇后的个数 
 4 int tot;
 5 int C[20];
 6 void search(int cur)
 7 
 8     if(cur==n)//超出边界即放完了 
 9       for(int i=0;i<n;i++)
10          for(int j=0;j<n;j++)
11              if(C[i]==j) cout<<*;
12              else cout<<o;
13              if(j==n-1) cout<<endl;
14          
15        
16       cout<<endl;
17       tot++;
18     
19     else for(int i=0;i<n;i++)//列举列的数字 
20         
21             int ok=1;
22             C[cur]=i;//尝试把第cur行的皇后放在第i列 
23             for(int j=0;j<cur;j++)
24               if(C[cur]==C[j]||cur-C[cur]==j-C[j]||cur+C[cur]==j+C[j])
25                   
26                      ok=0;
27                      break;
28                  
29             if(ok) search(cur+1);     
30         
31 
32 int main()
33 
34     cin>>n;
35     search(0);
36     cout<<tot<<endl;
37     return 0;
38 

 

以上是关于DFS的主要内容,如果未能解决你的问题,请参考以下文章

下面发布的图形代码的 DFS 遍历是不是有任何改进? [关闭]

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js

片段和活动之间的核心区别是啥?哪些代码可以写成片段?

VSCode自定义代码片段——.vue文件的模板