1781. Knight (bfs)

来源:互联网 发布:linux 开源邮件系统 编辑:程序博客网 时间:2024/05/19 10:07



#include <iostream>#include <queue>#include <cstring>using namespace std;queue<int> q;int vis[520][520],dis[520][520],dx[]={-2,-2,-1,-1,1,1,2,2},dy[]={-1,1,2,-2,2,-2,1,-1};int main(){int cases,n,sx,sy,ex,ey,s,g,t;cin>>cases;while(cases--){while(!q.empty())q.pop();cin>>n>>sx>>sy>>ex>>ey;s=sx*n+sy;g=ex*n+ey;memset(dis,-1,sizeof(dis));memset(vis,0,sizeof(vis));vis[sx][sy]=1;dis[sx][sy]=0;q.push(s);while(!q.empty()){s=q.front();sx=s/n;sy=s%n;if(s==g) break;for(int i=0;i<8;i++){ex=sx+dx[i];ey=sy+dy[i];if(ex>=0&&ex<n&&ey>=0&&ey<n){if(!vis[ex][ey]){dis[ex][ey]=dis[sx][sy]+1;vis[ex][ey]=1;t=ex*n+ey;q.push(t);}}}q.pop();}cout<<dis[g/n][g%n]<<endl;}return 0;}