社区讨论
求助!过河卒
P1002[NOIP 2002 普及组] 过河卒参与者 3已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lo7h9pbk
- 此快照首次捕获于
- 2023/10/27 01:48 2 年前
- 此快照最后确认于
- 2023/10/27 01:48 2 年前
CPP
#include <iostream>
using namespace std;
int counta=0,bx,by,hx,hy;
int onelist[8][2] = {{2,1},{1,2},{-1,2},{-2,1},{-2,-1},{-1,-2},{1,-2},{2,-1}};
void solve(int nowx,int nowy)
{
if (nowx > bx || nowy > by) // 跳出
{
return;
}
if (nowx == bx && nowy == by) // 第一种情况
{
counta++;
return;
}
int updatex=nowx+1;
int updatey=nowy; // 向下走更新
bool flag=false; // 设置找到的标志
for (int i=0;i<8;i++) // 循环查表
{
if (updatex == hx+onelist[i][0] && updatey == hy+onelist[i][1]) // 查到内容
{
flag=true; // 设置flag
break; // 跳出循环
}
}
if (!flag) // 如果没有被找到
{
solve(updatex,updatey); // 继续递归
}
updatex=nowx,updatey=nowy+1; // 第二轮循环
flag=false; // 重置flag
for (int i=0;i<8;i++) // 循环查表
{
if (updatex == hx+onelist[i][0] && updatey == hy+onelist[i][1]) // 查到
{
flag=true; // 设置flag
break; // 跳出
}
}
if (!flag) // 如果没有激活flag
{
solve(updatex,updatey); // 新一轮递归
}
}
signed main()
{
cin >> bx >> by >> hx >> hy;
solve(0,0);
cout << counta << endl;
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...