#include <stdio.h> #define N 8 int matrix[N][N]; //棋盘矩阵 int cnt; int Jude(int row, int col) { int i,j; for (i = 0; i < row; i++) { for (j = 0; j < N; j++) { if (matrix[i][j] == 1) if( j == col || i + j == row + col || i - j == row - col || j - i == col -row || i + j == row + col) { return -1; } } } return 0; } void Print() { int row, col; for (row = 0; row < N; row ++) { for (col = 0; col < N; col++) { printf("%d ",matrix[row][col]); } printf("\n"); } printf("\n"); } int Queen(int row) { int col, ret; if (N == row) { Print(); cnt ++; return 0; } for (col = 0; col < N; col++) { ret = Jude(row,col); if (0 == ret) { matrix[row][col] = 1; Queen(row + 1); matrix[row][col] = 0; } } if (col == N) return -1; //无位置可填 return 0; } int main() { cnt = 0; Queen(0); printf("Total: %d\n",cnt); return 0; } 2013/11/10 10:40 cost:40