关于八皇后的解法,Java版

    问题的由来这里就不赘述了。
    这里记录一下心里思考的过程。
    最开始没考虑到斜着不能摆放的问题。直接用   (1C8)*(1C7)*(1C6)*(1C5)*(1C4)*(1C3)*(1C2)*(1C1)=40,320。得到40,320的排列,分别是第一个子(行1(8)选1,行2(7)选1,以此类推)。后来发现皇后斜着的也能吃。 囧(我幼儿园玩过。)
    这个就比较复杂一点。思考了很久,也看了下网上的实现。发觉面向切面(过程)编程严重。难道就没有能很好记录下所有排列,逻辑清楚一点(这个应该是有的,但我懒得去找,还是自己实现有意思)。供我后期为所欲为的算法吗?想了想还是打算自己写一个出来。
    项目分2个类,一个类是pojo(EightQueen),用于存储一种解法的模型。采用int[] size 为8的 数组,分表标识了第i行的皇后放在哪里。
    由于用到递归,而且最终返回的是一个比较多的结果集,所以获取的方法应该返回一个ArrayList<EightQueen>。
    通过递归的思路来考虑,我们肯定要在方法内部有一个此变量然后加上他递归调用获取所有可行解。可行解都是有1个父的落子(未完成的落子棋盘,推多出所有此父棋盘下的所有解。)顾入参为一个父EightQueen即可,但考虑到性能优化,如果可以把想要求出的下一步解的行数告诉我,我可以更快的处理。顾此方法概念形成:每次都取出父棋盘的下一步所有可能落子解。直到递归调用至第八行把落子求出,进入终止条件,把解写入arraylist 并返回。至此,解法完毕。
     本博客只用于记录自己成长的点滴。希望有读者喜欢~
ps:项目下载地址:http://download.csdn.net/detail/hangdra/8418719


    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值