37跳棋(4)

来源:互联网 发布:win10双系统删除ubuntu 编辑:程序博客网 时间:2024/04/28 20:05

智力游戏





规则:最多跳9步,使得黑色的都在白色的左边。

步骤分解:



也可以用深度优先搜索求出合理的一个解。
代码:
#include<iostream>using namespace std;int list[7] = { 0, 1, 1, 1, 2, 2, 2 };int result[6] = { 2, 2, 2, 1, 1, 1 };int get_(){for (int i = 0; i < 7; i++)if (!list[i])return i;return 0;}void move(int n){int k = get_();list[k] = list[k + n];list[k + n] = 0;}bool dfs(int deep){if (deep == 9){for (int i = 0, j = 0; j < 6; i++, j++){if (list[i] == 0)i++;if (list[i] != result[j])return false;}cout << get_() << endl;return true;}int k = get_();for (int i = -3; i <= 3; i++){if (i == 0 || k+i>=7 || k+i<0)continue;move(i);bool flag = dfs(deep + 1);move(-i);if(flag){cout << get_() << endl;return true; }}return false;}int main(){dfs(0);return 0;}

输出:
5
2
0
3
6
5
2
4
1
0
最开始的空格在0处,然后移动1号格子,然后移动4号格子。。。

如果把代码中唯一出现的9改成8,可以发现,8步是无法完成的。
如果修改result,可以发现,最后空格一定是在第5号格子,否则是没法9步完成的。
2 0