接着上篇文章,探讨下八皇后问题:
下面是修改后的源码,参考了网友的答案:
#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);
}