数据结构:八皇后、N皇后

£神魔★判官ぃ 2022-05-31 14:48 275阅读 0赞

八皇后:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <algorithm>
  5. #include <memory.h>
  6. int n = 8;
  7. int total = 0;
  8. int c[8];
  9. bool is_ok (int row) {
  10. for (int j = 0; j < row; j++) {
  11. if (c[row] == c[j] || row - c[row] == j - c[j] || row + c[row] == j + c[j]) {
  12. return false;
  13. }
  14. }
  15. return true;
  16. }
  17. void queen (int row) {
  18. if (row == n) {
  19. total++;
  20. }
  21. else {
  22. for (int col = 0; col < n; col++) {
  23. c[row] = col;
  24. if (is_ok(row)) {
  25. queen(row+1);
  26. }
  27. }
  28. }
  29. }
  30. int main (int argc, char **argv) {
  31. queen(0);
  32. printf("%d", total);
  33. return 0;
  34. }

N皇后:

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <algorithm>
  5. #include <memory.h>
  6. int visit[3][50];
  7. int a[50];
  8. int sum;
  9. int n = 8;
  10. void dfs (int row) {
  11. int i;
  12. if (row == n+1) {
  13. sum++;
  14. return;
  15. }
  16. for (i=1; i<=n; i++) {
  17. if (visit[0][row-i+n] == 0 && visit[1][i] == 0 && visit[2][row+i] == 0) {
  18. visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 1;
  19. dfs(row+1);
  20. visit[0][row-i+n] = visit[1][i] = visit[2][row+i] = 0;
  21. }
  22. }
  23. }
  24. int main (int argc, char **argv) {
  25. sum = 0;
  26. memset(visit, 0, sizeof(visit));
  27. dfs(1);
  28. printf("%d", sum);
  29. return 0;
  30. }

发表评论

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

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

相关阅读

    相关 皇后

    八皇后问题介绍 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不

    相关 皇后

    八皇后 求解思路 可以将八皇后看成全排列问题,因为每次都是在某一行选择某个位置,所以不需要考虑行的问题。每次只需要求出当前行的棋子所在列。所以可以化为全排列问

    相关 N 皇后

    提到回溯算法那肯定离不开 n 皇后这道算法题,它实在是太经典了。 所谓 n 皇后问题 ,指的是如何将 `n` 个皇后放置在 `n×n` 的棋盘上,并且使皇后彼此之间不能相互攻

    相关 皇后

    / Queen 八皇后问题 :递归实现 1. 从第一行开始递归 2. 然后枚举当前行中的每一列, 3. 如果可以

    相关 皇后

    八皇后问题是一个古老而著名的问题,是回溯算法的典型案例。该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇