八皇后问题的并行

 

    八皇后问题:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列或同一斜线上,问有多少种摆法。

八皇后问题的串行

    为实现八皇后问题,既每行每列放置一个皇后,而且每一条对角线和每一条反对角线上最多只能有一个皇后,主要需要解决放置冲突的问题。冲突主要包括行、列、两条对角线,具体情况如下:

    (1)列:规定每一列放一个皇后,不会造成列上的冲突;

    (2)行:当第I行被某个皇后占领后,则同一行上的所有空格都不能再放皇后,要把以I为下标的标记置为被占领状态;

    (3)对角线:对角线有两个方向。在同一对角线上的所有点(设下标为(i,j)),要么(i+j)是常数,要么(i-j)是常数。因此,当第I个皇后占领了第J列后,要同时把以(i+j)(i-j)为下标的标记置为被占领状态。

    总结来说,假设棋盘上的两个皇后的坐标分别为(i1,j1)(i2,j2),不允许(i1i2)=(j1j2)或者(i1+j1)=(i2+j2)的情况出现。

  

八皇后问题的并行

     该算法是将八皇后问题的所有可能的解置于相应的棋盘上,主进程负责生成初始化的棋盘,并将该棋盘发送到某个空闲进程的从进程,由该从进程求出棋盘上满足初始化条件的所有的解。这里,假设主进程只初始化棋盘的前两列,即在棋盘上的前两列分别放上两个皇后,这样就可以产生8×864个棋盘。对于N皇后问题,算法与八皇后问题基本类似,只要在程序实现的时候将皇后数设为N,然后加入输入语句,就可以实现N皇后的求解。

    同样,并行算法的基本条件是对同时放置在棋盘上的任意两个皇后(i1j1)和(i2j2),不允许(i1i2)=(j1j2)或者(i1+j1)=(i2+j2)的情况出现。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值