day53-马踏棋盘( 二 )


day53-马踏棋盘

文章插图
4.优化
day53-马踏棋盘

文章插图
  1. 根据上面的代码,当前点走的下一个位置,是按照我们的顺时针方向来挑选位置的,因此,所选择的点的下一个可以走的位置的个数是不确定的
  2. 优化的思路是:我们应该优先选择的下一个位置,这个位置的再下一个位置应该尽可能少,这样就可以减少回溯的次数
  3. 代码:对ps集合按照可以走的下一个位置的次数进行升序排序(从小到大排序)
修改:
  1. 编写方法
//写一个方法,对ps集合的各个位置,可以走的下一个位置的次数进行排序,把可能走的下一个位置从小到大进行排序public static void sort(ArrayList<Point> ps){ps.sort(new Comparator<Point>() {@Overridepublic int compare(Point o1, Point o2) {return next(o1).size()-next(o2).size();}});}
  1. 在递归中调用该方法,对ps集合按照可以走的下一个位置的次数进行升序排序(从小到大排序)

day53-马踏棋盘

文章插图
优化结果:
day53-马踏棋盘

文章插图
【day53-马踏棋盘】

经验总结扩展阅读