八皇后的非递归问题

//八皇后问题

/*八皇后是一个 8*8  64个方块
    要求:1:每一行只能放一个放一个皇后
          2:每一列只能放一个皇后
          3:左斜线(15),右斜线(15)上只能有一个皇后,并且放够8个皇后    算法:声明三个数组和一个栈,三个数组分别对应列,左斜线和右斜线,每行遍历一回,判断列,左右斜线是否有皇后,若无,则放,
    若有,则,下一列,直到栈满结束,一组解,在栈中输出
*/
//非递归,只求一个解
 

#include<stdio.h>
#include<stdlib.h>

int col[8] = { 0,0,0,0,0,0,0,0};//查看那一列是否放皇后
int right[15] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };//每一条斜线
int left[15] = { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 };
int Q[8];
void EightQueen()
{
    int top=-1, i=0, j=0;
    while (top != 7)
    {
        //每一行的八列
        for (; j < 8; j++)
        {
            if (!col[j] && !left[i + j] && !right[7 - i + j])
            {
                Q[++top] = j;
                col[j] = left[i + j] = right[7 - i + j] = 1;
                i++;
                j = 0;
                break;
            }
        }
        if (j == 8)
        {
            i--;
            col[j] = left[i + j] = right[7 - i + j] = 0;
            j++;
        }
    }
}

void printEightQueen()
{
    //输出一组解
    for (int i = 0; i < 8; i++)
        printf("%d,%d\t", i, Q[i]);
}

int main(void)
{
    EightQueen();
    printEightQueen();
    return 0;

}

 

    原文作者:八皇后问题
    原文地址: https://blog.csdn.net/likang315/article/details/82718677
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞