N皇后递归

我不是女神ヾ 2022-06-18 08:47 242阅读 0赞
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void NQueen( int k);
  4. int queenPos[1000];
  5. int N;
  6. int main()
  7. {
  8. cin >> N;
  9. NQueen(0);
  10. return 0;
  11. }
  12. void NQueen( int k) { //在0~k-1行皇后已经摆好的情况下,摆第K行及其后皇后的位置
  13. int i;
  14. if( k == N) { // N个皇后已经摆好
  15. for( i = 0; i < N; i++)
  16. cout << queenPos[i] + 1 << " ";
  17. cout << endl;
  18. return ;
  19. }
  20. for( i = 0; i < N; i++) { //逐尝试第K个皇后的位置
  21. int j;
  22. for( j = 0; j < k; j++) {
  23. //和已经摆好的k个皇后的位置比较,看是否冲突
  24. if( queenPos[j] == i || //判断同一列
  25. abs(queenPos[j] - i) == abs(k-j)) { //判断斜
  26. break; //冲突,则试下一个位置
  27. }
  28. }
  29. if( j == k) { //符合条件 不冲突
  30. queenPos[k] = i; //将第K个皇后摆放在位置i
  31. NQueen(k+1);
  32. }
  33. }
  34. }

发表评论

表情:
评论列表 (有 0 条评论,242人围观)

还没有评论,来说两句吧...

相关阅读

    相关 ---n皇后问题

    题目描述: 在 n x n 的棋盘上面所有的皇后不能相互攻击,即所有的皇后 既不在同一行、不在同一列,也不在同一对角线,如下图所示(以 4 x 4 的棋盘举例): !

    相关 归入门】n皇后 问题

    题目描述 会下国际象棋的人都很清楚:皇后可以在横、竖、斜线上不限步数地吃掉其他棋子。 如何将8个皇后放在棋盘上(有8 8个方格),使它们谁也不能被吃掉!这就

    相关 --八皇后

      八皇后这个典的问题,是每个真正程序员必须经历过的。这也是我第二次来解决这个问题了,第一次应该是学数据结构那时候吧。这次写起来顺利多了,基本没遇到什么卡壳的地方。递归+回溯。