题意:给定起始位置及终点位置,用最少的走法到达终点。 思路:BFS ps:数组又开小了 囧! #include<iostream> #include<cstdio> #include<cstring> using namespace std; #define len 310 int dir[][2]={{-1,-2},{-2,-1},{-2,1},{-1,2},{1,2},{2,1},{2,-1},{1,-2}}; bool vis[len][len]; int n; struct node { int x,y,step; }beg,end,queue[10000]; void bfs() { int front=0,rear=0; memset(vis,true,sizeof(vis)); int i; rear++; queue[rear].x=beg.x;queue[rear].y=beg.y; queue[rear].step =0; vis[beg.x][beg.y]=false; while(front!=rear) { front++; if(queue[front].x==end.x&&queue[front].y==end.y) { printf("%d/n",queue[front].step ); return ; } for(i=0;i<8;i++) { int tempx=queue[front].x+dir[i][0]; int tempy=queue[front].y+dir[i][1]; if(tempx>=0&&tempx<n&&tempy>=0&&tempy<n&&vis[tempx][tempy]) { if(tempx==end.x&&tempy==end.y) { printf("%d/n",queue[front].step +1); return ; } else { vis[tempx][tempy]=false; rear++; queue[rear].x =tempx;queue[rear].y=tempy; queue[rear].step =queue[front].step +1; } } } } } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); scanf("%d%d",&beg.x,&beg.y); scanf("%d%d",&end.x,&end.y); bfs(); } return 0; }