设计一个跳棋问题

来源:百度知道 编辑:UC知道 时间:2024/05/29 01:16:04
A方和B方各有三子,中间有一空位,初始位置为:
A A A W B B B
其中A表示A方三个棋子,B表示B方三个棋子,W表示空位。游戏的目的是使棋子互换位置,最终得到如下所示的状况:
B B B W A A A
跳棋移动的规则如下所示:
(1)一个棋子可向空格中移动;
(2)一个棋子可以跳过对方棋子进入空格,但只允许跨过对方的一个棋子,不允许跨过两个或两个以上的棋子;
(3)无论移动还是跳动,只允许棋子向对方方向走,即A子只能向右走,B子只能向左走。
编制程序,能在给定每方N个子(N<=10)的情况下,完成上述下棋过程,要求显示每一步的棋盘状况。

这个题目有点难度
不过可用广度优先搜索算法:
棋盘的数据结构
{
int a[7];
int min_step;
}

我大致写一下
两个数据结构
已搜状态队列q1
正在搜索的状态队列q2

main()
{
将初始节点加到q2;
while(q2 isn't empty)
{
new_s=takeout from q2;
if(new_s belong to q1 or q2)
continue;
else
{
if(new_s is target)
return;
else
{
步数加一;
根据new_s扩展q2;(最多4种可能);
}

}
}

a little suggestion,
just glance it!
thank you

}