打卡信奥刷题(3380)用C++实现信奥题 P9795 [NERC 2018] Easy Chess

打卡信奥刷题(3380)用C++实现信奥题 P9795 [NERC 2018] Easy Chess P9795 [NERC 2018] Easy Chess题目背景翻译自 NERC 2018 E 题。题目描述Elma 正在学习象棋。Elma 是个新手她还不特别了解象棋是如何下的所以为了更好地让她了解象棋她的奶奶让她从一个棋盘如下图中进行n nn次移动每次移动只能是水平或垂直地移动若干个格子的且每个点只能到达一次使得从 a1 到 h8 处。输入格式输入一个数n ( 2 ≤ n ≤ 63 ) n(2 \leq n \leq 63)n(2≤n≤63)表示你一共需要走的步数。输出格式给出一种可行方案且保证停留过的点不重复。输入输出样例 #1输入 #14输出 #1a1 f1 c1 c8 h8说明/提示对于所有数据保证2 ≤ n ≤ 63 2 \leq n \leq 632≤n≤63且保证存在至少一种合法方案。C实现#includebits/stdc.h#defineintlonglongusingnamespacestd;intn,cnt,step[70][5];//记录答案boolmp[10][10];//表示是否访问过boolflag;//标记结束intdx[5]{0,0,0,1,-1},dy[5]{0,1,-1,0,0};voiddfs(intx,inty){if(x8y8cntn){for(inti1;in;i){//输出答案charca(char)(step[i][1]-1);//因为答案中我们存储的是整型所以要转化为相应字符coutcstep[i][2] ;}flag1;//标记已经找到答案也可以使用 exist(0)return;}if(cntn)return;//当步数超过时返回for(inti1;i4;i){//枚举方向for(intj1;j7;j){//枚举移动长度intkxxdx[i]*j,kyydy[i]*j;if(kx8||kx1||ky8||ky1)continue;//排除越界情况if(mp[kx][ky]0){//没有被访问mp[kx][ky]1;cnt;step[cnt][1]kx,step[cnt][2]ky;dfs(kx,ky);cnt--;mp[kx][ky]0;if(flag1)return;//已经找到答案可以继续返回}}}return;}signedmain(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);//快读cinn;couta1 ;//先输出第一个位置mp[1][1]1;//注意预处理第一个位置dfs(1,1);return0;}后续接下来我会不断用C来实现信奥比赛中的算法题、GESP考级编程题实现、白名单赛事考题实现记录日常的编程生活、比赛心得感兴趣的请关注我后续将继续分享相关内容