本帖最后由 ForeverBell 于 2010-2-2 09:24 编辑
今天又换了个启发函数, 为所有数码离家的曼哈顿距离之和.
似乎这个更快一点(16ms). 看样子 A* 里启发决定一切.- const int dis[10][10] = {
- {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, 0, 1, 3, 1, 2, 3, 2, 3, 4},
- {0, 1, 0, 1, 2, 1, 2, 3, 2, 3},
- {0, 2, 1, 0, 3, 2, 1, 4, 3, 2},
- {0, 1, 2, 3, 0, 1, 2, 1, 2, 3},
- {0, 2, 1, 2, 1, 0, 1, 2, 1, 2},
- {0, 3, 2, 1, 2, 1, 0, 3, 2, 1},
- {0, 2, 3, 4, 1, 2, 3, 0, 1, 2},
- {0, 3, 2, 3, 2, 1, 2, 1, 0, 1},
- {0, 4, 3, 2, 3, 2, 1, 2, 1, 0},
- };
- int calc_h(int key)
- {
- int result = 0;
- for (int i = 9; i > 0; --i) {
- result += dis[i][key % 10];
- key /= 10;
- }
- return result;
- }
复制代码 |