Quick actions

cmd+k|ctrl+k

Navigation

Languages

八皇后

Snippet info

Language

C

Visibility

public

Author

jiemnij

Created

2017-03-18T01:50:59Z

Updated

2017-03-18T01:51:08Z

#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;
}

INFO