#include <stdio.h>
int queen_position[8]= {0};
int solve_count = 0;
/******************************************************************************
* 函数名称: display_solve
* 功能描述: 显示八皇后的一种解法
* 输入参数: 无
* 输出参数: 无
* 修改历史: 2017-3-06, 10:17, 修改者: Jiemnij
******************************************************************************/
void display_solve(void)
{
int i, column;
printf("------------------------------\n");
for (i = 0; i < 8; i++) {
for (column = 0; column < queen_position[i]; column++) {
printf("-");
}
printf("X");
for (column++; column < 8; column++) {
printf("-");
}
printf("\n");
}
}
/******************************************************************************
* 函数名称: check_pos_valid
* 功能描述: 判断位置是否符合八皇后要求
* 输入参数: <queen_index> 当前判断是第几个皇后
* : <column> 第几个皇后位于的列数
* 输出参数: =1 符合要求, =0 不符合要求
* 修改历史: 修改者:
******************************************************************************/
int check_pos_valid(int queen_index, int column)
{
int i, col;
for (i = 0; i < queen_index; i++) {
col = queen_position[i]; //皇后的位置
if ((col == column) || //列数相同自然不行
((col + (queen_index - i)) == column) || //斜着/相同也不行
((col - (queen_index - i)) == column)) { //斜着\相同也不行
return 0;
}
}
return 1;
}
/******************************************************************************
* 函数名称: eight_queen
* 功能描述: 八皇后解法
* 输入参数: <index> = 第几个皇后
* 输出参数: 无
* 修改历史: 修改者:
******************************************************************************/
void eight_queen(int index)
{
int column;
for (column = 0; column < 8; column++) {
if (check_pos_valid(index, column)) { //找到了符合条件的皇后就设置位置
queen_position[index] = column;
if (7 == index) { //如果已经找到了八皇后
solve_count++; //次数增加
display_solve(); //打印具体位置
return; //退出
}
eight_queen(index + 1);
}
}
}
int main(int argc, char*argv[])
{
eight_queen(0);
printf("\nTotal = %d", solve_count);
return 0;
}