这道题目不算难吗,就是基本的bfs。
#include<iostream> #include<queue> #include<string.h> using namespace std; short map[20][20],vis[20][20],n,m,x1,y1,x2,y2,i,x,y,xn,yn; short dx[8]={1,1,2,2,-1,-1,-2,-2},dy[8]={2,-2,1,-1,2,-2,1,-1}; void bfs() { queue<short>q; memset(map,0,sizeof(map)); memset(vis,0,sizeof(vis)); vis[x1][y1]=1; q.push(x1); q.push(y1); while(!q.empty()) { x=q.front();q.pop(); y=q.front();q.pop(); if (x==x2&&y==y2) break; for (i=0;i<8;i++) { xn=x+dx[i]; yn=y+dy[i]; if (!vis[xn][yn]&&xn>=0&&xn<n&&yn>=0&&yn<m) { vis[x][y]=1; q.push(xn); q.push(yn); map[xn][yn]=map[x][y]+1; } } } if ((x!=x2)||(y!=y2)) map[x2][y2]=-1; } int main() { cin>>n>>m>>x1>>y1>>x2>>y2; x1--;x2--;y1--;y2--; bfs(); cout<<map[x2][y2]<<endl; return 0; }