八皇后问题深度遍历搜索

八皇后问题我就不再这里说明题意了

我在这里说说限定条件

q(x,y)   Q(x1,y1)

有以下四个限定条件

(1)x=x1

(2)y=y1

(3)x+y=x1+y1

(4)x-y=x1-y1

用到算法中就这样有92组解

#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;

int x[10], n;
int num;

bool ok(int k) {
    for(int i = 0; i < k; i++)
        if(x[i] == x[k] || abs(i-k) == abs(x[i]-x[k]))     //限定条件
            return 1;
    return 0;
}

void dfs(int q) {
    if(q == 8) {
        printf("%d\n", ++num);
        for(int i = 0; i < n; i++)
            printf("%d ", x[i]+1);
        printf("\n");
        return;
    }
    for(int i = 0; i < n; i++) {                    //所有列摆放的位置,列坐标的情况也就都考虑,这样就铜盘考虑了
        x[q] = i;
        if(ok(q)) continue;<span style="white-space:pre">		</span>      <span style="white-space:pre">	</span>    //如果这个位置不能摆放则,跳出这一层,因为这一层冲突,回到上一个皇后的位置再次寻找合适的位置
        else dfs(q+1);
    }
}

int main() {
    scanf("%d", &n);
    num = 0;
    for(int i = 0; i < n; i++) { 			//第一行可以摆放的位置 横坐标的所有情况就有了 
        x[0] = i;				        // 第一个皇后的位置
        dfs(1);
    }
    return 0;
}
    原文作者:八皇后问题
    原文地址: https://blog.csdn.net/echoerror/article/details/50933892
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注