66中国跳棋(7)162(8)169(9)175(10)181(11)
【摘要】
智力游戏
这个游戏,属于独立钻石棋系列的一种,由标准的独立钻石棋变化而来。
关于标准的独立钻石棋:点击打开链接
这个程序也是用那个直接修改而来,而且只需要修改3个地方,下面都用标注出来了。
代码:
#include<iostream>using namespace std; int sum(i...
智力游戏

这个游戏,属于独立钻石棋系列的一种,由标准的独立钻石棋变化而来。
关于标准的独立钻石棋:点击打开链接
这个程序也是用那个直接修改而来,而且只需要修改3个地方,下面都用标注出来了。
代码:
#include<iostream>
using namespace std;
int sum(int list[][7]) //sum函数用来返回最后剩余多少个棋子
{
int sum = 0;
for (int i = 0; i < 7; i++)for (int j = 0; j < 7; j++)sum += list[i][j];
return sum - 49; ///这个地方和独立钻石不一样
}
void up(int list[][7], int i, int j) //跳过(i,j)往上跳
{
list[i - 1][j] ++;
list[i][j] --;
list[i + 1][j] --;
}
void down(int list[][7], int i, int j) //跳过(i,j)往下跳
{
list[i + 1][j] ++;
list[i][j] --;
list[i - 1][j] --;
}
void left(int list[][7], int i, int j) //跳过(i,j)往左跳
{
list[i][j - 1] ++;
list[i][j] --;
list[i][j + 1] --;
}
void right(int list[][7], int i, int j) //跳过(i,j)往右跳
{
list[i][j + 1] ++;
list[i][j] --;
list[i][j - 1] --;
}
bool move(int list[][7]) //找出任何可以跳的一步,并跳,跳完之后递归调用move(),直到不能再跳
{
if (sum(list) < 4)return true; //当得到一种只剩下3颗棋子的方法,程序结束
for (int i = 1; i < 6; i++)for (int j = 0; j<7; j++)
{
if ((i == 3 || j>1 && j < 5) && list[i][j] == 2)
{
if (list[i - 1][j] == 1 && list[i + 1][j] == 2) //满足往上跳的条件
{
up(list, i, j);
if (move(list))
{
cout << i << j << "up ";
return true;
}
down(list, i, j); //恢复list和result
list[i][j] += 2;
}
else if (list[i - 1][j] == 2 && list[i + 1][j] == 1)//满足往下跳的条件
{
down(list, i, j);
if (move(list))
{
cout << i << j << "down ";
return true;
}
up(list, i, j);
list[i][j] += 2;
}
}
}
for (int i = 0; i < 7; i++)for (int j = 1; j < 6; j++)
{
if ((j == 3 || i>1 && i < 5) && list[i][j] == 2)
{
if (list[i][j - 1] == 1 && list[i][j + 1] == 2)//满足往左跳的条件
{
left(list, i, j);
if (move(list))
{
cout << i << j << "left ";
return true;
}
right(list, i, j);
list[i][j] += 2;
}
else if (list[i][j - 1] == 2 && list[i][j + 1] == 1)//满足往右跳的条件
{
right(list, i, j);
if (move(list))
{
cout << i << j << "right ";
return true;
}
left(list, i, j);
list[i][j] += 2;
}
}
}
return false;
}
int main()
{
int list[7][7]; //list用来表示状态,1表示空格,2表示有棋子
不像独立钻石用0表示角落,为了方便,这里也用1
for (int i = 0; i < 7; i++) 这个初始化和独立钻石不一样
for (int j = 0; j < 7; j++)
{
list[i][j] = 1;
if (i == 3 || j == 3)list[i][j] = 2;
}
list[2][4] = list[4][2] = list[2][2] = list[4][4] = 2;
list[3][3] = 1; //初始化list
move(list);
cout << endl << "注意,输出的顺序是反着的";
system("pause>nul");
return 0;
}
输出结果:
43up 44left 43down 53up 34down 44right 35left 14down 03right 12up 32up 31right 24up 23down 22up
注意,输出的顺序是反着的
类似独立钻石棋详解一文,把输出这些反过来写到main函数里面,运行可以得到下图:
代码:
#include<iostream>
using namespace std;
void display(int list[][7])
{
for (int i = 0; i < 7; i++)
{
for (int j = 0; j < 7; j++)
{
if (list[i][j] == 2)cout << "●";
else cout << " ";
}
cout << endl;
}
cout << endl<<endl<<endl;
system("pause>nul");
}
void up(int list[][7],int i,int j) //跳过(i,j)往上跳
{
list[i-1][j] ++;
list[i][j] --;
list[i+1][j] --;
display(list);
}
void down(int list[][7], int i, int j) //跳过(i,j)往下跳
{
list[i+1][j] ++;
list[i][j] --;
list[i-1][j] --;
display(list);
}
void left(int list[][7], int i, int j) //跳过(i,j)往左跳
{
list[i][j-1] ++;
list[i][j] --;
list[i][j+1] --;
display(list);
}
void right(int list[][7], int i, int j) //跳过(i,j)往右跳
{
list[i][j+1] ++;
list[i][j] --;
list[i][j-1] --;
display(list);
}
int main()
{
int list[7][7]; //list用来表示状态,1表示空格,2表示有棋子
不像独立钻石用0表示角落,为了方便,这里也用1
for (int i = 0; i < 7; i++) 这个初始化和独立钻石不一样
{
for (int j = 0; j < 7; j++)
{
list[i][j] = 1;
if (i == 3 || j == 3 )list[i][j] = 2;
}
}
list[2][4] = list[4][2] = list[2][2] = list[4][4] = 2;
list[3][3] = 1; //初始化list
display(list);
up(list, 2, 2);
down(list, 2, 3);
up(list, 2, 4);
right(list, 3, 1);
up(list, 3, 2);
up(list, 1, 2);
right(list, 0, 3);
down(list, 1, 4);
left(list, 3, 5);
right(list, 4, 4);
down(list, 3, 4);
up(list, 5, 3);
down(list, 4, 3);
left(list, 4, 4);
up(list, 4, 3);
system("pause>nul");
return 0;
}
162(8)
169(9)
175(10)
181(11)

文章来源: blog.csdn.net,作者:csuzhucong,版权归原作者所有,如需转载,请联系作者。
原文链接:blog.csdn.net/nameofcsdn/article/details/53050353
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)