标签: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 }
标签:int 种子 code 回溯 一个 实例 问题 iostream arch
原文地址:https://www.cnblogs.com/TYXmax/p/10989118.html