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)