一个NxN的棋盘,其中有m对棋子,以连线的方式将每一对棋子都连接起来,并保证棋盘被填满。(连接仅能横竖移动,不可交叉,不能跨棋子)
例如给定5x5的棋盘:
0 0 0 4 30 0 0 0 00 0 1 0 00 0 0 2 04 2 1 3 0
其中1、2、3、4分别代表棋子,0代表空位(可连线)。期望连接完成之后:
4 4 4 4 34 2 2 2 34 2 1 2 34 2 1 2 34 2 1 3 3
其中除了初始点之外的数字都代表线。这里需要注意是“连线”,即每条线必须是有头有尾有顺序的,实际输出结果中也应包含线的每一段的顺序以模拟实际划线过程,化为图形界面大概就是下面这样:
问题补充:本人首先自己写了一个连接算法,是纯粹的递归尝试(因为不是求最短路径,没有用A star),复杂度太高,对小棋盘还好很快出结果(JS在Chrome上几秒之内),但从9x9开始效率惨不忍睹(几十分钟到几个小时-_-#),想了一下没有想到太好的解决方案,求各位帮助啊~~多谢多谢~
森林海