题目:
链接https://ac.nowcoder.com/acm/problem/201622
思路:
根据题目可得,“跳马”能跳周围总共八步,使用bfs搜索,从初始位置出发,并用map去存每个点的步数,跳到了最终位置直接退出bfs。
代码:
#includeusing namespace std; int bx[]= {1,2,2,1,-1,-2,-2,-1},by[]= {2,1,-1,-2,-2,-1,1,2}; //周围八步 queue > q; map ,int> ma; int main() { int n,m,x1,y_1,x2,y2; cin >> n >> m>>x1>>y_1>>x2>>y2; q.push({x1,y_1}); ma[{x1,y_1}]=1; bool bo=false; //标志位,用于判断是否到达终点 while(q.size()){//bfs int x =q.front().first; int y = q.front().second; q.pop(); for(int i=0;i<8;i++){//跳周围八步 int xx = x+bx[i]; int yy = y+by[i]; if(xx<=0||xx>n||yy<=0||yy>m||ma[{xx,yy}]) continue; //数组边界与是否经过这个点了 q.push({xx,yy}); ma[{xx,yy}]=ma[{x,y}]+1;//map记录步数 if(xx==x2&&yy==y2){//到达终点直接退出 bo =true;//标志位 break; } } if(bo) break;//已到达过终点直接退出bfs } if(bo||(x1==x2&&y2==y_1)) cout << ma[{x2,y2}]-1;//判断标志位是否为true else cout << "-1"; return 0; }



