求出n皇后问题的全部解 递归算法——利用递归消除多重循环的思想
void NQueen(int k); //表示从第k行开始放置皇后,失败则什么都不做,回退到上一步,成功则递归完整代码:
#include<iostream> #include<cmath> #include<cstring> using namespace std; int n; int queenPos[100]; void NQueen(int k){ int i; if(k == n){ for(i=0;i<n;i++) cout << queenPos[i] + 1 << " "; cout << endl; return; } for(i=0;i<n;i++){ int j; for(j=0;j<k;j++){ if(queenPos[j] == i || abs(queenPos[j]-i) == abs(j-k)) break; } if(j == k){ queenPos[k] = i; NQueen(k+1); } } } int main(){ cin >> n; NQueen(0); return 0; }