POJ 2935 Basic Wall Maze BFS

本文介绍了一种使用广度优先搜索(BFS)解决迷宫寻路问题的方法。通过标记不可通行方向并利用BFS算法寻找从起点到终点的路径,实现了迷宫寻路的功能。代码中详细展示了如何实现这一算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

注意墙的处理,我是这么做的,把每个方块不能行走的方向标记出来,剩他的就是传统BFS了。

#include<stdio.h> #include<queue> using namespace std; int sx,sy,ex,ey; int h[4]={1,-1,0,0}; int g[4]={0,0,1,-1}; int dir[8][8][5]; bool visit[7][7]; struct point{ int x; int y; int time; int pre; char dir; }que[1000]; void limdir(int a,int b,int c,int d){ int i; if(a==c){ for(i=b+1;i<=d;i++){ dir[c][i][0]=1; dir[c+1][i][1]=1; } } else if(b==d){ for(i=a+1;i<=c;i++){ dir[i][b][2]=1; dir[i][b+1][3]=1; } } } char cal(int i){ if(i==0) return 'S'; else if(i==1) return 'N'; else if(i==2) return 'E'; else return 'W'; } void print(int tem){ if(que[tem].pre!=-1){ print(que[tem].pre); printf("%c",que[tem].dir); } } int bfs(){ int front=0,rear=0,xx,yy,i,j,k; struct point cur; cur.x=sx; cur.y=sy; cur.time=0; cur.pre=-1; que[rear++]=cur; while(front<rear){ struct point tem; tem=que[front]; for(i=0;i<4;i++){ xx=tem.x+h[i]; yy=tem.y+g[i]; if(xx<=0 || xx>6 || yy<=0 || yy>6) continue; if(dir[tem.x][tem.y][i]) continue; if(visit[xx][yy]) continue; struct point pp; pp.x=xx;pp.y=yy;pp.time=tem.time+1; pp.pre=front;pp.dir=cal(i); que[rear]=pp; visit[xx][yy]=1; if(xx==ex && yy==ey){ print(rear); printf("\n"); return 1; } rear++; } front++; } return 0; } int main(){ int i,j,k,a,b,c,d; while(scanf("%d %d",&sy,&sx) && !(sx==0 && sy==0)){ scanf("%d %d",&ey,&ex); memset(dir,0,sizeof(dir)); memset(visit,0,sizeof(visit)); for(i=1;i<=3;i++){ scanf("%d %d %d %d",&b,&a,&d,&c); limdir(a,b,c,d); } visit[sx][sy]=1; bfs(); } }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值