接着上篇文章,探讨下八皇后问题:
下面是修改后的源码,参考了网友的答案:
#include<stdio.h> #define Bool int #define True 1 #define False 0 static count=0; void print(int gEightQueen[])//根据gEightQueen[]中的值,打印出皇后图形 { int outer; int inner; for(outer = 0; outer <8; outer ++){ for(inner = 0; inner < gEightQueen[outer]; inner ++) printf("0 "); printf("1 "); for(inner = gEightQueen[outer] + 1; inner < 8; inner ++) printf("0 "); printf("\n"); } printf("=====================================\n"); } Bool IsSafe(int col,int row,int queenList[]) { int tempCol; int tempRow; //只检查前面的列 for (tempCol = 0; tempCol < col; tempCol++) { tempRow = queenList[tempCol]; if (tempRow == row) { //同一行 return False; } if (tempCol == col) { //同一列 return False; } if (tempRow - tempCol == row - col || tempRow + tempCol == row + col) { return False; } } return True; } void eight_queen(int col, int queenList[]) { int row; for(row = 0; row < 8; row++) { if(IsSafe(col, row, queenList)) { queenList[col] = row; if(7 == col) { count ++, print(queenList); //queenList[col] = 0; return; } eight_queen(col + 1, queenList); //queenList[col] = 0; } } } int main() { int queenList[8]; eight_queen(0,queenList); printf("%d ",count); }