N皇后

7赢月 · · 866 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

是典型的回溯问题,不过做这个题目,花了周日一天的时间,这一天时间,大部分时间都在思考出现问题的原因。这里也通过leetcode的提交记录,来回顾下做这题的心路历程,顺别加深对此类问题的求解。

在第一次解答,没有沿用之前的思路,只想到了递归,对于递归之外的问题模糊不清,就提笔了,结果可想而知,前后碰壁,在leetcode上甚至没有通过第一个测试用例。主要问题是对递归的思想还是不清晰,对参数的了解还是理解的不够透彻。客观评价,甚至是没有递归的影子。

  • 很明显的,对于这类需要输出每个解的题目,都需要递归调用最后的结果参数,并且在golang中,这个参数必须是个指针;
  • 其次是单次的结果,对于golang来说,这个也是很重要的,每个单次的结果,不能直接在结果上进行append,这中操作发生了很多次,造成的结果就是每次产生结果都是一致的;
  • 最后,对于每次结果的输入和输出,都需要保持前后一次性,拿本题距离,放置一枚棋子,必然需要标记改换后影响的各个位置,遍历结束之后,收起此枚皇后,又需要还原此次产生的影响。

以上这三个点都是在递归问题中,必须每次严格的遵守的。
今天的皇后问题,就是在这之上,花费了太多的时间,做了很多无用功。
当然,N皇后问题也有它的难点,个人认为应该将时间都花在这些问题的处理上,而不是上面那些有实际模板的问题上。N皇后的问题难点就在于剪枝问题的处理上,对于剪枝问题上,笔者启先,简单的使用二维数组,简单的使用皇后规则,落子添加标记,起子删除标记,可是这明显存在bug,最后看了题解,处理方法是分别记录横竖,对角线这四个维度的标记。

今天是血泪教训的一天,下周继续,将挑战新的题目,依然是递归类型的。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:7赢月

查看原文:N皇后

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

866 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传