POJ-2935-Basic Wall Maze
来源:互联网 发布:福利ios直播软件 编辑:程序博客网 时间:2024/05/22 13:23
这个题用BFS搜索,题目大意是给你6*6的网格,其中第一行的2个数据表示起点,第二行的2个数据表示终点,第三行开始有3行,表示一道墙(可以当作一条线),有墙的地方相应不能通过。主要就是对墙需要特殊处理下。我采用的是用数组存是否该点能够上下左右通行,如果不能则map[i][j][k]=1(i,j)为该点坐标。求起点到终点的路线,用N,E,S,W代表东西南北,表示走的方向。
处理方法:
1、首先对网格周围一圈进行特殊处理
2、对于墙有2种可能
a、x坐标相同,则处理左右两边。
b、y坐标相同,则处理上下两边。
3、我是先找到最快到达终点的路线,然后回朔确定具体的路线,最后反向输出即为答案。
处理的时候注意按照题中所画的形式,否则可能会造成方向上的错误。
直接贴代码吧,还是比较简单:
#include<cstdio>#include<cstring>#include<iostream>#include<queue>#define MAX 8using namespace std;int map[MAX][MAX][4],use[MAX][MAX],px[MAX][MAX],py[MAX][MAX],pos[MAX][MAX];//上右下左int sx,sy,ex,ey,movex[4]={0,1,0,-1},movey[4]={-1,0,1,0};char ways[5]={"NESW"};int main(){ while(scanf("%d%d",&sx,&sy)&&(sx||sy)) {memset(map,0,sizeof(map));memset(use,0,sizeof(use));for(int i=0;i<7;i++) map[1][i][0]=map[6][i][2]=1;for(int i=0;i<7;i++) map[i][1][3]=map[i][6][1]=1;scanf("%d%d",&ex,&ey);for(int i=0;i<3;i++){ int ax,ay,bx,by; scanf("%d%d%d%d",&ax,&ay,&bx,&by); if(ax==bx) {if(ax>0){ for(int j=min(ay,by)+1;j<=max(ay,by);j++)map[j][ax][1]=1;}if(ax<6) for(int j=min(ay,by)+1;j<=max(ay,by);j++)map[j][ax+1][3]=1; } else {if(ay>0) for(int j=min(ax,bx)+1;j<=max(ax,bx);j++)map[ay][j][2]=1;if(ay<6) for(int j=min(ax,bx)+1;j<=max(ax,bx);j++)map[ay+1][j][0]=1; }}queue<int> x,y;x.push(sx);y.push(sy);use[sy][sx]=1;int flag=0;while(!x.empty()){ int itx=x.front(); x.pop(); int ity=y.front(); y.pop(); for(int i=0;i<4;i++) {if(map[ity][itx][i]) continue;int xx=itx+movex[i];int yy=ity+movey[i];if(use[yy][xx]) continue;px[yy][xx]=itx;py[yy][xx]=ity;pos[yy][xx]=i;use[yy][xx]=1;x.push(xx);y.push(yy);if(xx==ex&&yy==ey){ flag=1; break;} } if(flag)break;}int itx=ex,ity=ey,cou=0;char ans[300];while(!(itx==sx&&ity==sy)){ ans[cou++]=ways[pos[ity][itx]]; int ita=px[ity][itx],itb=py[ity][itx]; itx=ita,ity=itb;}for(int i=cou-1;i>=0;i--) printf("%c",ans[i]);printf("\n"); } return 0;}
- POJ-2935-Basic Wall Maze
- POJ:2935 Basic Wall Maze
- poj 2935 Basic Wall Maze
- poj 2935 Basic Wall Maze
- POJ-2935 Basic Wall Maze
- poj 2935 Basic Wall Maze
- POJ 2935 Basic Wall Maze
- POJ-2935 Basic Wall Maze
- poj 2935 Basic Wall Maze
- POJ 2935 Basic Wall Maze BFS
- poj 2935 Basic Wall Maze bfs
- poj 2935 Basic Wall Maze bfs
- POJ 2935 Basic Wall Maze 深搜 dfs
- POJ 2935 Basic Wall Maze (BFS)
- POJ 2935 Basic Wall Maze 已翻译
- poj 2935 Basic Wall Maze bfs+路径记录
- poj2935 Basic Wall Maze
- poj2935 Basic Wall Maze
- HDU 2680 Choose the best route 超级源点or反向建图
- 几种排序算法
- 远程安装oracle11G出现安装向导后,很慢,无法正常点击下一步配置
- Ajax用法
- android犯错日记3
- POJ-2935-Basic Wall Maze
- 向Makefile传宏
- Android--动态添加控件
- [SSP]HTTP权威指南——Web服务器初探
- 合并两个已经排序的数组
- HDU 3499 Flight 反向建图
- 用Django写的贴吧
- AMR文件格式分析
- ajax验证码