八皇后问题深度遍历搜索

来源:互联网 发布:淘宝怎么提现到支付宝 编辑:程序博客网 时间:2024/06/05 18:16

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

我在这里说说限定条件

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


0 0
原创粉丝点击