洛谷 P1219 八皇后 ( DFS

本文介绍了一种使用深度优先搜索(DFS)解决N皇后问题的方法,并提供了完整的AC代码实现。通过递归地放置皇后并检查冲突来寻找有效的位置,最终输出所有可能的解决方案。

简单的DFS 回溯判断三个方向就可以了 很久很久以前谢过了 复习一下,,

AC代码

#include <bits/stdc++.h>
using namespace std;

// mps[i]=j 表示第i行到第j列有一个棋子
// vis[0] 储存棋子的列数 vis[1], vis[2] 表示 对角线上面的情况
int mps[100];
bool vis[3][100];
int sum = 0;
int n;

void dfs(int x) {
    if(x > n) {
        sum++;
        if(sum > 3) {
            return;
        }
        else {
            for(int i = 1; i < n; i++) {
                cout << mps[i] << " ";
            }
            cout << mps[n] << endl;
        }
    }
    for(int i = 1; i <= n; i++) {
        if((!vis[0][i]) && (!vis[1][x+i]) && (!vis[2][x-i+n])) {
            mps[x] = i;
            vis[0][i] = true; vis[1][x+i] = true; vis[2][x-i+n] = true;
            dfs(x+1);
            vis[0][i] = false; vis[1][x+i] = false; vis[2][x-i+n] = false;
        }
    }
}

int main() {
    cin >> n;
    dfs(1);
    cout << sum << endl;
return 0;
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值