POJ 1915 Knight Moves G++

来源:互联网 发布:wamp修改php.ini路径 编辑:程序博客网 时间:2024/05/29 16:23

#include <iostream>#include <utility>#include <queue>#include <cstring>//参考《挑战》中的宽搜 using namespace std;int dx[8]={1,2,2,1,-1,-2,-2,-1};int dy[8]={-2,-1,1,2,2,1,-1,-2};int main(){int N;cin>>N;int jg[N];for(int i=0;i<N;i++){int NUM;cin>>NUM;int a[NUM][NUM];memset(a,0,sizeof(a));int sx,sy;int ex,ey;cin>>sx>>sy;cin>>ex>>ey;queue<pair<int,int> > que;que.push(pair<int,int>(sx,sy));a[sx][sy]=1;jg[i]=0;while(que.size()){pair<int,int> t=que.front();que.pop();if((t.first==ex)&&(t.second==ey)){jg[i]=a[t.first][t.second];break;}for(int i=0;i<8;i++){int nx=t.first+dx[i];int ny=t.second+dy[i];if((nx>=0)&&(nx<NUM)&&(ny>=0)&&(ny<NUM)&&(a[nx][ny]==0)){ que.push(pair<int,int>(nx,ny));a[nx][ny]=a[t.first][t.second]+1;}}}}for(int i=0;i<N;i++){cout<<jg[i]-1<<endl;}return 0;}

l*l的国际象棋棋盘,给出马的起始坐标和终止坐标,求从起始到终止最少多少步。

原创粉丝点击