码迷,mamicode.com
首页 > 其他好文 > 详细

DFS

时间:2019-06-07 21:06:54      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:int   种子   code   回溯   一个   实例   问题   iostream   arch   

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

标签:int   种子   code   回溯   一个   实例   问题   iostream   arch   

原文地址:https://www.cnblogs.com/TYXmax/p/10989118.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!