hdu 1245(推箱子) BFS
纠结了一个上午,原来是运算符重载弄错了!我去。
该题用一个四维数组标记人和箱子的当前状态。在判断是否满足队列条件时,用continue巧妙的处理了,如果搬运工遇到箱子的问题。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<queue> 5 using namespace std; 6 struct node 7 { 8 int x,y; 9 int bx,by; 10 int step; 11 bool friend operator<(node a,node b) 12 { 13 return a.step>b.step;//这里开始定义的小于 交了n次都不对 14 }; 15 }; 16 #define N 10 17 int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; 18 int map[N][N]; 19 int mark[N][N][N][N]; 20 int sx,sy,bx,by,ex,ey; 21 int n,m; 22 void BFS() 23 { 24 memset(mark,0,sizeof(mark)); 25 node cur,next; 26 priority_queue<node>q; 27 int x,y,xx,yy,i; 28 cur.x=sx;cur.y=sy;cur.bx=bx;cur.by=by;cur.step=0; 29 q.push(cur); 30 mark[sx][sy][bx][by]=1; 31 while(!q.empty()) 32 { 33 cur=q.top(); 34 q.pop(); 35 if(cur.bx==ex&&cur.by==ey) 36 { 37 printf("%d\n",cur.step); 38 return ; 39 } 40 for(i=0;i<4;i++) 41 { 42 next.x=x=cur.x+dir[i][0]; 43 next.y=y=cur.y+dir[i][1]; 44 next.bx=xx=cur.bx; 45 next.by=yy=cur.by; 46 next.step=cur.step; 47 if(x<0||x>=n||y<0||y>=m)//第一次用for循环写判断符合条件的WA了,改用continue可以很好的处理如果搬运工前面是箱子的问题 48 continue; 49 if(map[x][y]==1||mark[x][y][xx][yy]==1) 50 continue; 51 if(x==xx&&y==yy) 52 { 53 next.bx=xx=xx+dir[i][0]; 54 next.by=yy=yy+dir[i][1]; 55 next.step++; 56 if(xx<0||xx>=n||yy<0||yy>=m) 57 continue; 58 if(map[xx][yy]==1||mark[x][y][xx][yy]==1) 59 continue; 60 61 } 62 q.push(next); 63 mark[x][y][xx][yy]=1; 64 65 } 66 } 67 printf("-1\n"); 68 return ; 69 } 70 int main() 71 { 72 //freopen("input.txt","r",stdin); 73 // freopen("output.txt","w",stdout); 74 int t; 75 scanf("%d",&t); 76 while(t--) 77 { 78 memset(map,0,sizeof(map)); 79 scanf("%d%d",&n,&m); 80 int i,j; 81 for(i=0;i<n;i++) 82 { 83 84 for(j=0;j<m;j++) 85 { 86 scanf("%d",&map[i][j]); 87 } 88 } 89 for(i=0;i<n;i++) 90 { 91 for(j=0;j<m;j++) 92 { 93 if(map[i][j]==4) 94 { 95 sx=i,sy=j; 96 97 } 98 else if(map[i][j]==2) 99 { 100 bx=i,by=j; 101 102 } 103 else if(map[i][j]==3) 104 { 105 ex=i,ey=j; 106 107 } 108 } 109 } 110 BFS(); 111 } 112 113 return 0; 114 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?