标题: 跳马遍历问题, 1300大赏编程
性别:男-离线 天痕

白衣伯爵中大夫

Rank: 10Rank: 10Rank: 10Rank: 10
组别 白衣卿相
级别 右将军
好贴 4
功绩 224
帖子 1182
编号 208
注册 2003-8-29


不论先后:
做出1得300
做出2得1000

1:跳马问题
国际象棋盘上某点上有一马,让马遍历整个棋盘没有重复。
输入:马的位置(I,J)(1〈=I〈=8;1〈=J〈=8)
输出:跳法(给棋盘标号)

2:还是跳马问题
在1的基础上按跳的顺序给棋盘上的点编号,最后要求跳出个8阶幻方来
输入:马的位置(I,J)(1〈=I〈=8;1〈=J〈=8)
输出:跳法(给棋盘标号)
时限:20s

参加者以附件形式提交程序



谨以第二题纪念逝者~~


顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-12 09:30 资料 短消息 只看该作者


QUOTE:
原帖由天痕于2005-01-12, 8:52:06发表
不论先后:
做出1得500
做出2得1000

1:跳马问题
国际象棋盘上某点上有一马,让马遍历整个棋盘没有重复。
输入:马的位置(I,J)(1〈=I〈=8;1〈=J〈=8)
输出:跳法(给棋盘标号)

2:还是跳马问题
在1的基础上按跳的顺序给棋盘上的点编号,最后要求跳出个8阶幻方来
输入:马的位置(I,J)(1〈=I〈=8;1〈=J〈=8)
输出:跳法(给棋盘标号)
时限:20s



谨以第二题纪念逝者~~  

第一个的代码等一下贴
幻方是指横竖斜的和都相等?
斜仅指主对角线吧?


顶部
性别:男-离线 天痕

白衣伯爵中大夫

Rank: 10Rank: 10Rank: 10Rank: 10
组别 白衣卿相
级别 右将军
好贴 4
功绩 224
帖子 1182
编号 208
注册 2003-8-29


幻方是指横竖斜的和都相等?
斜仅指主对角线吧?

是的

第一个纯粹送钱,第二个有时间限制的才有意义。

第一题奖金改少了,不过既然你先发帖了你的就不变吧~~
顶部
性别:男-离线 天痕

白衣伯爵中大夫

Rank: 10Rank: 10Rank: 10Rank: 10
组别 白衣卿相
级别 右将军
好贴 4
功绩 224
帖子 1182
编号 208
注册 2003-8-29


我先去睡觉
6小时后回来查收

本题1截止于北京时间1月15日零点
题2不设截止时间
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-12 09:50 资料 短消息 只看该作者
现已证明:互不同构的八阶幻方至少存在12 631 127 040组。(这个数字我没考证过)
这版程序每秒只能搜索400k步左右,显然构造所有幻方的想法是不成立了
只能通过检验knight tour的solution来解决了
假设solution的平均搜索步数为40k,20s只能有200个可行解
考虑java的效率问题,改编为c++,最多也只有2000个可行解
看来还得优化程序啊


附件: knighttour.rar (2005-1-12 09:50, 2.94 K)
该附件被下载次数 229
顶部
性别:女-离线 天宫公主
(司徒家的颖颖)

虞国公主

Rank: 12Rank: 12Rank: 12
组别 限制发言用户
级别 大将军
好贴 6
功绩 517
帖子 11552
编号 1037
注册 2004-10-25
来自 天津
家族 司徒实业


发表于 2005-1-12 10:04 资料 主页 短消息 只看该作者 QQ
题目和我上大一时的一个家庭作业一样,我用的是C++,最后算了一夜才出来的。就说当时的电脑还都是奔3一类的,可20秒也忒短的点吧?
顶部
性别:未知-离线 kulaog

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 7
编号 26506
注册 2004-12-2


发表于 2005-1-12 14:46 资料 短消息 只看该作者
先算出第一题。
第二题只要判断是不是八阶幻方就可以拉,还需要知道“互不同构的八阶幻方至少存在12 631 127 040组”有什么用啊。
现在手懒,做不动,提个小建议。
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-12 14:58 资料 短消息 只看该作者


QUOTE:
原帖由kulaog于2005-01-12, 14:46:56发表
先算出第一题。
第二题只要判断是不是八阶幻方就可以拉,还需要知道“互不同构的八阶幻方至少存在12 631 127 040组”有什么用啊。
现在手懒,做不动,提个小建议。

单纯优化跳马问题,可以将解决时间降到毫秒级
可是想要单纯搜索某点所有跳马问题的解,找出其中八阶幻方的解
或者搜索所有某点为1的不同构的八阶幻方,从中找出跳马问题的解
估计时间在小时级
除非找到一个好的解发生算法,能够兼顾两个问题的求解
顶部
性别:未知-离线 kulaog

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 7
编号 26506
注册 2004-12-2


发表于 2005-1-12 15:05 资料 短消息 只看该作者
先算出第一题,放到内存里面,数量就是有限的,然后判断每一种跳法是不是八阶幻方就可以啦,事情就是一步一步做的啊。为什么要一口吃成胖子啊。
8+8+2=18,只要12次加法就可以算出这种跳发是不是八阶幻方,12*n步,也不多阿。应该比第一个还快啊。
顶部
性别:未知-离线 kulaog

Rank: 1
组别 百姓
级别 在野武将
功绩 0
帖子 7
编号 26506
注册 2004-12-2


发表于 2005-1-12 16:28 资料 短消息 只看该作者
只要检验结果是不是八阶幻方,谁要你算出八阶幻方又多少可能啦。

就好像给你10组数字,每组2个数字,问你那组数字加起来等于0。
而你却要求出所有加起来等于0的2个数字,这个也没有解啊。

关键在于是检验不是求解。
顶部
性别:男-离线 天痕

白衣伯爵中大夫

Rank: 10Rank: 10Rank: 10Rank: 10
组别 白衣卿相
级别 右将军
好贴 4
功绩 224
帖子 1182
编号 208
注册 2003-8-29


loranrowe第一题正确!
loranrowe 2005-01-13  ¥ 500 轩辕通宝


不过建议用C++来,JAVA的速度实在不敢恭惟啊~~


loranrowe能不能把“改进的启发式算法求得可行解的平均步数为73”说详细一点?这个我好像不知道
顶部
性别:未知-离线 loranrowe

Rank: 3Rank: 3Rank: 3
组别 士兵
级别 奋威校尉
好贴 1
功绩 6
帖子 143
编号 17767
注册 2004-9-16


发表于 2005-1-13 09:19 资料 短消息 只看该作者


QUOTE:
原帖由天痕于2005-01-13, 4:27:55发表
“改进的启发式算法求得可行解的平均步数为73”

其实就是用了la Warnsdorff矩阵,这个矩阵记录了棋盘各点的度数
这个是初始矩阵
2,3,4,4,4,4,3,2
3,4,6,6,6,6,4,3
4,6,8,8,8,8,6,4
4,6,8,8,8,8,6,4
4,6,8,8,8,8,6,4
4,6,8,8,8,8,6,4
3,4,6,6,6,6,4,3
2,3,4,4,4,4,3,2
每走一步,将相关点的度数减1
每步尽量先走度数小的点
度数相等的点边角优先
还有其他一些规则
据Dr. Gerald Wildenberg的文章说
在这种原则下,以棋盘上的各点为起始点,求得第一个解的平均搜索步数为73
不过我很怀疑他提供的数据,因为他竟然有两个点fail了,就是在10M步中没有找到解

ps:
第一个题用java语言是因为那是以前做的作业题...
从硬盘上翻出来就提交了
顶部

正在浏览此帖的会员 - 共 1 人在线




当前时区 GMT+8, 现在时间是 2024-11-17 05:42
京ICP备2023018092号 轩辕春秋 2003-2023 www.xycq.org.cn

Powered by Discuz! 5.0.0 2001-2006 Comsenz Inc.
Processed in 0.011384 second(s), 9 queries , Gzip enabled

清除 Cookies - 联系我们 - 轩辕春秋 - Archiver - WAP