该题目摘自《C专家编程》附录A.4 编程挑战。
#include <stdio.h> //检查该点有效返回1,否则返回0 int CheckPosition (int (*chess)[8], int row, int col) { int IsTrue = 1; int i, j; //左上方,行数减,列数减 for (i = row, j = col; IsTrue && i >= 0 && j >= 0; i--, j--) { if (chess[i][j] == 1) IsTrue = 0; } //上方,列数不变 for (i = row, j = col; IsTrue && i >= 0; i--) { if (chess[i][j] == 1) IsTrue = 0; } //右上方,行数减,列数加 for (i = row, j = col; IsTrue && i >= 0 && j < 8; i--, j++) { if (chess[i][j] == 1) IsTrue = 0; } return IsTrue; } void DisChess (int (*chess)[8]) { int i, j; static n = 0; printf("第%d种解法\r\n", ++n); for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { printf("%4d", chess[i][j]); } puts("\r\n"); } puts("\r\n"); } void EightQueen (int (*chess)[8], int row) { int col; if (row < 8) { for (col = 0; col < 8; col++) { if ((chess[row][col] = CheckPosition(chess, row, col)) == 1) { EightQueen(chess, row + 1); chess[row][col] = 0; } } } else { //显示 DisChess(chess); } } int main() { int chess[8][8] = {0}; EightQueen(chess, 0); return 0; }