栈(Stack)的应用—试探回溯法:八皇后问题、迷宫寻径

本文探讨了栈在解决问题中的应用,主要聚焦于试探回溯法解决八皇后问题和迷宫寻径。在八皇后问题中,通过逐行放置皇后并检查冲突,使用回溯策略来找到解决方案。迷宫寻径问题则利用栈来存储可能的路径,逐步探索直到找到出口。文中提供了具体的算法实现和实例解析。
摘要由CSDN通过智能技术生成

栈的应用

 

试探回溯法

1.八皇后问题

皇后类

struct Queen { //皇后类

    int x, y; //坐标

    Queen (int xx = 0, int yy = 0 ) : x(xx), y(yy) {};

    bool operator==( Queen const& q ) const { //重载判等操作符,检验不同皇后之间存在的冲突

        return (x==q.x) //行冲突

            || (y==q.y) //列冲突

            || (x+y == q.x+q.y) //对角线冲突

            || (x-y == q.x-q.y);
    
    }

    bool operator!=( Queen const& q) const { return !(*this == q); } //重载不等操作符

};

将存在冲突的皇后判作相等

每行仅能放置一个皇后,先见各皇后分配至每一行。逐个尝试着她们放置到无冲突的某列,若当前皇后在任何列都冲突,则回溯到上一个皇后。

 

N皇后算法:

void placeQueen ( int N ) { //N皇后算法:采用试探/回溯的策略,借助栈记录查找结果

    Stack<Queen> solu; //存放解的栈

    Queen q(0,0); //原点位置开始

    do { //反复试探,回溯

        if ( N <= solu.size() || N <= q.y ) { 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值