趣题.C89-8皇后问题

描述

在8x8的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

思路

枚举8个皇后的位置:将皇后甲放到第1行的第1列,在棋盘上标记出皇后甲不能攻击到的位置,接着将皇后乙尝试着放到皇后甲不能攻击到的每一个位置,并在每一次尝试中,标记出皇后乙不能攻击到在每一个位置,然后放皇后丙……直到8个皇后都放完或没有皇后可放时输出结果。

代码

定义棋盘类型

棋盘的每一个格子有三种情况:

  • 放了皇后
  • 没放皇后但可以放
  • 没放皇后且不能放
    用char来表示每个格子。因为:
  1. 省内存
  2. 输出ASCII棋盘时可以少做些转换

    enum {
        QUEEN     = 'X', // 放了皇后
        AVAILABLE = '_', // 没放皇后但可以放
        UNSAFE    = '.'  // 没放皇后且不能放
    };
    typedef char Chessboard[8][8];

你可能感兴趣的:(趣题.C89-8皇后问题)