第38次CSP第二题——机器人复健指南
·
题目网址:https://sim.csp.thusaac.com/contest/38/problem/1

以下解答仅供参考:
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
//8种跳跃方向
const int dx[8]={-2,-1,1,2,2,1,-1,-2};
const int dy[8]={1,2,2,1,-1,-2,-2,-1};
int main(){
int n,k;
cin>>n>>k;
int x,y;
cin>>x>>y;
//标记格子有没有被走过
vector<vector<bool>> visited(n+1,vector<bool>(n+1,false));
//放置坐标(x,y)和步数step
queue<pair<pair<int,int>,int>> q;
//将起始点放进队列中,初始步数设置为0
q.push({{x,y},0});
//标记起点走过
visited[x][y]=true;
int count=0;
while(!q.empty()){
//取出队首的格子(当前走到的位置+当前步数)
//auto相当于pair<pair<int,int>,int>
auto cur=q.front();
q.pop();
int cx=cur.first.first; //当前x
int cy=cur.first.second; //当前y
int step=cur.second;
if(step<=k){
count++;
}else{
continue;
}
for(int i=0;i<8;i++){
int nx=cx+dx[i]; //新x
int ny=cy+dy[i]; //新y
//判断新格子是否在棋盘内并且没走过
if(nx>=1 && nx<=n && ny>=1 && ny<=n && !visited[nx][ny]){
visited[nx][ny]=true;
q.push({{nx,ny},step+1});
}
}
}
cout<<count<<endl;
return 0;
}
运行结果:


DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)