求解4皇后问题(分枝限界法)

算法描述:

对于每一个放置点而言,它需要考虑四个方向上是否已经存在皇后。分别是行列,45度斜线和135度斜线。

行:每一行只放一个皇后,直到我们把最后一个皇后放到最后一行的合适位置,则算法结束。

列:列相同的约束条件,只需判断j是否相等即可。

45度斜线和135度斜线:约束条件——当前棋子和已放置好的棋子不能存在行数差的绝对值等于列数差的绝对值的情况,若存在则说明两个棋子在同一条斜线上

代码:

#include <iostream>

#include <queue>

using namespace std;

class Node

{

public:

  Node(int n) : t(0), n(n)

  {

       pos = new int[n + 1];

       for (int i = 0; i <= n; ++i)

       {

            pos[i] = 0;

       }

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
任务分配问题是一类常见的组合优化问题,其目标是将n个任务分配给n个工人,使得每个工人只能完成一个任务,且所有任务的总成本最小。这个问题可以使用分枝限界求解。 以下是任务分配问题的分枝限界求解步骤: 1. 定义状态空间:状态空间是由当前节点及其所有可行的子节点组成的集合。每个状态表示一种可能的任务分配方案。 2. 定义上下界:上界是当前已知的最小成本,下界是当前节点及其子节点中最小成本的估计值。 3. 构造子节点:为了构造子节点,需要选择一个未被分配的任务,然后将它分配给一个工人。这样就可以得到一个新的分配方案,即一个新的子节点。 4. 分支:选择一个未被分配的任务,将其分配给一个工人,然后生成两个子节点,一棵子树用于求解分配了该任务的情况,另一棵子树用于求解未分配该任务的情况。 5. 剪枝:在生成子节点时,如果发现某个子节点的上界小于当前已知的最小成本,则可以剪去该子节点及其子树,因为它们不可能是最优。 6. 搜索:在搜索过程中,需要记录当前最优及其成本,并不断更新这个最优。当搜索到叶子节点时,如果该节点的成本小于当前最优,则可以更新最优。 7. 终止:搜索过程将一直进行到找到最优为止,或者搜索完所有状态空间后未找到最优。 以上就是任务分配问题的分枝限界求解步骤,通过这种方可以快速找到最优

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值