八皇后问题的并行

来源:互联网 发布:linux启动桌面命令 编辑:程序博客网 时间:2024/04/30 11:11

 

    八皇后问题:在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)的情况出现。

 

原创粉丝点击