8皇后问题,即马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上。
8皇后问题有多种解法,现在提出我的一种见解。
首先,我设置结构体来表示每一行,每一列的皇后位置,其中x为行,y为列。
算法大致如下:
1、设置栈来存储每一行皇后位置:stack<node> sta
2、设置const int number = 8 int i = 0; int j = 0;为一开始循环的位置,即第一行皇后的位置。
3、设置循环while ( sta.size( ) != number )一旦栈的长度不为8,则继续插入;
4、以下为while循环的主体程序:
以下为检查函数,一旦栈为空的,则表示当前为第一行的皇后,可以插入,返回true;非空,则依次与栈中数据对比,一旦处于同一列或是两者行相减的绝对值等于列相减的绝对值,则双方处于攻击位置,则返回false。
最后程序输出如下: