HRBUST 1181 移动 bfs模板
1 #include<bits/stdc++.h>///该头文件为万能头文件,有些学校oj不能使用,读者可根据需要自行修改 2 using namespace std; 3 const int MAXN=305; 4 int vis[MAXN][MAXN]; 5 int X[9]={0,-2,-1,-2,-1,1,2,2,1}; 6 int Y[9]={0,-1,-2,1,2,2,1,-1,-2}; 7 struct point 8 { 9 int x; 10 int y,step; 11 }; 12 queue<point>q; 13 14 int xx1,yy1,x2,y2; 15 int res; 16 void bfs() 17 { 18 vis[xx1][yy1]=1;//1 19 point a; 20 a.x=xx1; 21 a.y=yy1; 22 a.step=0; 23 q.push(a);//2 24 while(!q.empty())//3 25 { 26 point head=q.front();//4 27 q.pop(); 28 if(head.x==x2&&head.y==y2)//5 29 { 30 //若找到需要的点则结束循环并返回 31 res=head.step; 32 return; 33 } 34 35 else 36 { 37 38 for(int i=1;i<=8;i++)//6 39 { 40 point t; 41 t.x=head.x+X[i]; 42 t.y=head.y+Y[i]; 43 if(t.x>=0&&t.x<=300&&t.y>=0&&t.y<=300&&vis[t.x][t.y]==0)///把八个方向都放到队列中去 44 { 45 vis[t.x][t.y]=1;///每一步都等于其上一步+1 46 t.step=head.step+1; 47 //printf("x=%d y=%d\n",t.x,t.y); 48 q.push(t); 49 } 50 } 51 } 52 } 53 } 54 int main() 55 { 56 57 while(~scanf("%d %d %d %d",&xx1,&yy1,&x2,&y2)) 58 { 59 memset(vis,0,sizeof(vis)); 60 while(!q.empty())///清空队列 61 { 62 q.pop(); 63 } 64 bfs(); 65 printf("%d\n",res); 66 } 67 return 0; 68 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步