遇到一个算法问题,希望朋友们多给些意见。最近SDK写了个连连看游戏,其中的两点间寻路的算法基本上是用网上的一段代码,全路径求解算法则是自己写的,遇到容易的矩阵可以秒杀,但遇到复杂的则速度就很慢了。希望大家给些意见,改善一下效率。先说全程求解部分。说明:1、如果有解,出解法;2、如果无解,给出相对最佳路径;3、如果有多解,到一个就退出;4、连连看的矩阵为10*12(10行,每行12张牌),加上上下左右要各留一空行以便寻路,矩阵为12*14;5、矩阵中某点值为0表示无牌,否则有牌;6、矩阵不一定是初始状态,因为有时我们玩到一半可能用软件来求解。例子数组: m[12][14] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 3, 18, 26, 9, 2, 6, 33, 10, 9, 4, 15, 0, 0, 19, 18, 29, 7, 14, 9, 10, 23, 34, 16, 21, 15, 0, 0, 21, 27, 26, 2, 26, 11, 30, 17, 25, 14, 10, 5, 0, 0, 19, 12, 33, 33, 31, 34, 15, 11, 28, 7, 8, 23, 0, 0, 12, 16, 27, 4, 5, 21, 27, 8, 1, 6, 23, 4, 0, 0, 19, 34, 25, 1, 6, 26, 25, 15, 17, 12, 6, 31, 0, 0, 10, 4, 16, 17, 31, 8, 8, 7, 28, 28, 34, 30, 0, 0, 3, 21, 5, 14, 18, 2, 12, 20, 20, 2, 25, 1, 0, 0, 30, 20, 19, 31, 3, 9, 14, 16, 5, 29, 33, 3, 0, 0, 1, 20, 11, 27, 28, 17, 30, 18, 7, 29, 11, 23, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }
这个数组也许是无解的,如果无解,则给出相对最好的解法。
基本流程:
1、 复制矩阵和路径数组为m和way; 2、 先一个有牌点p1; 3、 然后其它几个配对的点same[N]; 4、 依次检查p1和same[N]中的元素是否相通; 5、 若相通则消去两张牌,若消完则返回; 6、 没消完再递归寻路。
|