代码如下:
#include<bits/stdc++.h>
using namespace std;
struct node{
int x,y,step;//经过的位置坐标 步数
}q;
int mapp[55][55],vis[55][55];
//定义结构体数组模拟队列
vector<node>que;
//方向数组
int nt[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
//m行列 n步数
int m,n;
//cnt记数
int cnt;
void bfs(int sx,int sy){
//起点值入队
q.x=sx;
q.y=sy;
q.step=0;
//队尾入队
que.push_back(q);
//标记为1
vis[sx][sy]=1;//标记此点已经被走过
//开始搜索
while(!que.empty()){
//循环搜索周围四个点
for(int i=0;i<4;i++){
//获取新元素
vector<node>::iterator start=que.begin();
//获取尾元素
vector<node>::iterator endd=que.end()-1;
//四个搜索方向坐标编号
int tx=(*start).x+nt[i][0];
int ty=(*start).y+nt[i][1];
//判断此点是否可以走
if(tx>=1&&tx<=m&&ty>=1&&ty<=m&&mapp[tx][ty]==1&&vis[tx][ty]==0&&(*endd).step<n){
vis[tx][ty]=1;//标记此点已经被搜索过
//当前点入队
q.x=tx;
q.y=ty;
q.step=(*start).step+1;//步数+1
que.push_back(q);//入队
cnt++;
}
}
que.erase(que.begin());//删除首元素 队首出队
}
}
int main(){
int sx,sy;//开始位置
cin>>m>>n;
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
cin>>mapp[i][j];
}
}
cin>>sx>>sy;
bfs(sx,sy);
cout<<cnt;
return 0;
}