编程跳马问题
发布网友
发布时间:2022-12-08 20:18
我来回答
共1个回答
热心网友
时间:2024-12-03 06:59
// VC6 编译通过
#include <iostream.h>
void main()
{
// 变量声明
int N, M; // 棋盘的行N和列M
int (*S)[3]; // 记录每一步的位置和跳的方向
int P; // 记录步数
int T; // 下一步是否成功
int sum = 0; // 记录找到的解的数量
int i; // 循环变量
// 数据输入
cout << "请输入棋盘的行(N)和列(M):";
cin >> N >> M;
// 分配记录步骤信息的数组
S = new int[M+2][3];
// 变量初始化
S[1][0] = N; S[1][1] = 1; // 初始化第一步在左下角
S[1][2] = 1;
P = 1;
T = 0;
// 求解
while (P > 0)
{
T = 0;
switch(S[P][2])
{
case 1:
S[P+1][0] = S[P][0]-2;
S[P+1][1] = S[P][1]+1;
break;
case 2:
S[P+1][0] = S[P][0]-1;
S[P+1][1] = S[P][1]+2;
break;
case 3:
S[P+1][0] = S[P][0]+1;
S[P+1][1] = S[P][1]+2;
break;
case 4:
S[P+1][0] = S[P][0]+2;
S[P+1][1] = S[P][1]+1;
}
if (S[P+1][0] < 1 || S[P+1][0] > N || S[P+1][1] > M)
T = 1;
if (T==0)
if (S[P+1][0] == 1 && S[P+1][1] == M)
{
// 输出答案
cout << "跳法" << ++sum << ":";
for (i=1; i<=P+1; i++)
cout << " (" << S[i][0] << "," << S[i][1] << ") ";
cout << endl;
}
else
S[++P][2] = 0;
else
while(P>0 && S[P][2]>=4) P--;
S[P][2]++;
}
cout << "求解结束,共找到 " << sum << " 种跳法" << endl;
// 释放内存
delete []S;
}