问题提出:
有三个白子和三个黑子如下图布置:
○ ○ ○ . ● ● ●
用最少的步数将上图中白子和黑子的位置进行交换:
● ● ● . ○ ○ ○
游戏规则:
(1) 一次只能移动一个棋子;
(2) 棋子可以向空格中移动,也可以跳过一个对方的棋子进入空格,但不能向后跳,也不能跳过两个子。
解题思路:
参考代码:
#include <iostream>
#include <list>
using namespace std;
#define WHITEPIECE 1
#define BLACKPIECE 2
#define NULLVALUE 0
#define MAPLEN 7
typedef struct stStatus
{
int m_data[MAPLEN];
}Status;
list<Status> g_listatus;//存储整个步骤
void GameStep(Status& st, int NullPos);
bool GameOver(Status& st);
int main()
{
Status ss = {1,1,1,0,2,2,2};
GameStep(ss,3);
return 0;
}
void GameStep(Status& st, int NullPos)
{
g_listatus.push_back(st);