首页 > 代码库 > bfs Knight Moves
bfs Knight Moves
#include <iostream> #include <cstdio> #include <queue> #include <algorithm> #include <cstring> using namespace std; #define maxn 300 int steps=0; const int next[8][2]={{-1, -2}, {1, -2}, {-2, -1}, {2, -1}, {-2, 1}, {2, 1}, {-1, 2}, {1, 2}}; struct point { int x; int y; }; int book[maxn][maxn]; queue<point> q; void bfs(point a,point b,int l) { steps=0; while(!q.empty()) q.pop(); memset(book,0,sizeof(book)); book[a.x][a.y]=1; q.push(a); while(!q.empty()) { int que_size=q.size(); while(que_size--) { point head=q.front(); q.pop(); if(head.x==b.x&&head.y==b.y) return; point t; for(int i=0;i<8;i++) { t.x=head.x+next[i][0]; t.y=head.y+next[i][1]; if(t.x>=l||t.x<0||t.y>=l||t.y<0) continue; if(book[t.x][t.y]==0) { q.push(t); book[t.x][t.y]=1; } } } steps++; } } int main() { int cases; cin>>cases; point s,e; int l; while(cases--) { cin>>l>>s.x>>s.y>>e.x>>e.y; bfs(s,e,l); cout<<steps<<endl; } }
可以自行理解,没啥好讲的,在脑子里自己跑跑就懂了。
bfs Knight Moves
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。