8皇后问题续

来源:互联网 发布:江西淘宝大学电话 编辑:程序博客网 时间:2024/06/07 11:12

接着上篇文章,探讨下八皇后问题:

下面是修改后的源码,参考了网友的答案:

#include<stdio.h>#define Bool int#define  True 1#define  False 0static 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);}


原创粉丝点击