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 遍历是不是有任何改进? [关闭]