注册地址 登录
数学建模社区-数学中国 返回首页

intenvec的个人空间 http://www.madio.net/?291918 [收藏] [复制] [分享] [RSS]

日志

MATLAB 和 八皇后问题

已有 414 次阅读2011-4-28 11:33 |

在国际象棋的棋盘上放置8个皇后,使得皇后之间相互没有干绕。
MATLAB的 arrayfun 实现

clear;clc;close all
N=8;
T=N-2;
rows=1:N;         % 皇后所在行的位置
cols=perms(rows);  % 皇后所在列的位置
S=size(cols,1);
M=zeros(N,N,S); % 存储所以情况的矩阵
linearInd = sub2ind(size(M), repmat(rows',1,S), cols', repmat(1:S,N,1));
M(linearInd) = 1;
dv=arrayfun(@(k)max([arrayfun(@(x)sum(diag(M(:,:,k),x)),-T:T),arrayfun(@(x)sum(diag(rot90(M(:,:,k)),x)),-T:T)]),1:S);
M(:,:,dv>1)=[];

结果如下
N=8
M=8*8*92

说明该问题有92个解


N=12
上述算法的空间达到 6.8976e+010 ,超出了MATLAB的空间能力范畴。所以用其他的算法得到的N皇后问题的解如下

皇后数45   6     7   8 
  9  10  11  12  13  14
独立解1   
2   1    6   12  46  92  341  1787  9233  45752
全部解210   4    40   92  352  724  2680  14200  73712  365596

我们可以对独立解数 和 棋盘的面积 两个参数的对应关系变化进行研究。


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2025-8-14 19:23 , Processed in 0.239620 second(s), 27 queries .

回顶部