一、概念:回溯法也是一种枚举,但是回溯法将枚举(生成)和检查有机结合起来,从而减少了不必要的枚举。。
二、经典八皇后问题。
#include<iostream> #include<cmath> using namespace std; int vis[100]; int store[100]; int n; void queenProblem(int floor){ if(floor==n+1){ for(int i=1;i<=n;i++){ cout<<store[i]<<" "; } cout<<endl; } else for(int i=1;i<=n;i++){ int flag=1; for(int j=1;j<floor;j++){ if( abs(floor-j)==abs(i-store[j]) || i==store[j]){ //设置条件,减少不必要的枚举 flag=0; break; } } if(flag){ store[floor]=i; queenProblem(floor+1); } } } int main(){ while(cin>>n){ queenProblem(1); } }