找回密码
 注册
Simdroid-非首页
查看: 101|回复: 4

用arrayfun求解八皇后问题

[复制链接]
发表于 2010-12-30 09:57:16 | 显示全部楼层 |阅读模式 来自 河北廊坊
看了萝卜的程序,http://luobo.ycool.com/post.866141.html
用剔除的思想去求解八皇后问题
决定用arrayfun来重写一下这个问题,发现arrayfun的效率并不高
这样做只为代码的简洁,欢迎大家讨论

  1. clear;clc;close all
  2. N=8;
  3. T=N-2;
  4. rows=1:N;         % 皇后所在行的位置
  5. cols=perms(rows);  % 皇后所在列的位置
  6. S=size(cols,1);
  7. M=zeros(N,N,S); % 存储所以情况的矩阵
  8. linearInd = sub2ind(size(M), repmat(rows',1,S), cols', repmat(1:S,N,1));
  9. M(linearInd) = 1;
  10. 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);
  11. M(:,:,dv>1)=[];
复制代码

评分

1

查看全部评分

发表于 2010-12-30 16:08:55 | 显示全部楼层 来自 河北廊坊
Simdroid开发平台
一看到arrayfun这个函数就想到了你,再一看,果然是你写的帖子。
回复 不支持

使用道具 举报

发表于 2010-12-30 17:53:53 | 显示全部楼层 来自 四川成都
1# qibbxxt 版主提供的那个萝卜的博客还可以,matlab高人,有挺多东西可以学习哦。哈哈。
回复 不支持

使用道具 举报

发表于 2010-12-31 10:09:06 | 显示全部楼层 来自 北京
萝卜是《MATLAB科学计算与可视化仿真宝典》的作者,哈工大博士,05年前后活跃在哈工大紫丁香MATLAB版和研学论坛MATLAB版,在网上MATLAB论坛潜水时间长的人很多都对他比较熟悉。可惜最近几年不知是研究忙还是啥的,很少露面了。
回复 不支持

使用道具 举报

 楼主| 发表于 2010-12-31 10:17:47 | 显示全部楼层 来自 河北廊坊
恩,萝卜现在好像已经在哈工大做老师了,应该比较忙,最近也没有怎么更新日志了
看他的QQ,已经3个太阳,说明一直在隐身
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-5 03:28 , Processed in 0.039706 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表