poj3083 dfs+bfs搜索迷宫
2017-03-24 18:39
267 查看
#include<stdio.h> int mov[4][2]={{1,0},{0,1},{-1,0},{0,-1}}; int mov1[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; int mov2[4][2]={{0,-1},{1,0},{0,1},{-1,0}}; int vis[45][45]; char maze[45][45]; int queue[50*50][3]; int step,sx,sy,ex,ey,h,w,ans,flag=0; int bfs(int x,int y) { int front,rear,x1,x2,y1,y2,i; memset(vis,0,sizeof(vis)); queue[0][0]=x; queue[0][1]=y; queue[0][2]=1; vis[x][y]=1; front=-1; rear=0; while(front<rear) { front++; x1=queue[front][0]; y1=queue[front][1]; if(x1==ex&&y1==ey) { return queue[front][2]; } for(i=0;i<4;i++) { x2=x1+mov[i][0]; y2=y1+mov[i][1]; if(x2<0||x2>=h||y2<0||y2>=w||maze[x2][y2]=='#'||vis[x2][y2]) continue; step++; rear++; queue[rear][0]=x2; queue[rear][1]=y2; queue[rear][2]=queue[front][2]+1; vis[x2][y2]=1; } } } void dfs1(int x,int y,int s) { int i,x1,y1; if(x==ex&&y==ey) { step=s; flag=1; return ; } ans=(ans+3)%4; for(i=0;i<4;i++,ans=(ans+1)%4) { x1=x+mov1[ans][0]; y1=y+mov1[ans][1]; if(x1<0||x1>=h||y1<0||y1>=w||maze[x1][y1]=='#') continue; dfs1(x1,y1,s+1); if(flag) break; } } void dfs2(int x,int y,int s) { int i,x1,y1; if(x==ex&&y==ey) { step=s; flag=1; return ; } ans=(ans+3)%4; for(i=0;i<4;i++,ans=(ans+1)%4) { x1=x+mov2[ans][0]; y1=y+mov2[ans][1]; if(x1<0||x1>=h||y1<0||y1>=w||maze[x1][y1]=='#') continue; dfs2(x1,y1,s+1); if(flag) break; } } int main(void) { int i,j,T; scanf("%d",&T); while(T--) { scanf("%d%d",&w,&h); step=0; for(i=0;i<h;i++) scanf("%s",maze[i]); for(i=0;i<h;i++) { for(j=0;j<w;j++) { if(maze[i][j]=='S') { sx=i; sy=j; } if(maze[i][j]=='E') { ex=i; ey=j; } } } memset(vis,0,sizeof(vis)); vis[sx][sy]=1; ans=0; dfs1(sx,sy,1); printf("%d ",step); step=0; memset(vis,0,sizeof(vis)); vis[sx][sy]=1; ans=0; dfs2(sx,sy,1); printf("%d ",step); printf("%d\n",bfs(sx,sy)); } }
相关文章推荐
- 深度优先搜索例1--走迷宫问题
- 【游戏编程】AI-迷宫寻路算法-深度优先搜索和广度优先搜索
- hdu 1728 逃离迷宫(BFS+稍微改变一下搜索步骤)
- HDU 1728 逃离迷宫 (搜索)
- 【Codeforces Round 354 (Div 2)D】【迷宫搜索BFS】Theseus and labyrinth 门门互达 可做旋转操作 最少步数起点到终点
- 用广度优先搜索解迷宫问题
- 【搜索-广搜】 迷宫的最短路径
- 第一次的迷宫为队列版,这个为搜索版x(自己写的嘿嘿)
- 迷宫(深度搜索dfs)
- 用广度优先搜索解迷宫问题
- NYOJ306 走迷宫(dfs+二分搜索)
- 深度优先搜索迷宫路径算法的实现
- 57.深度优先搜索 广搜练习:迷宫(未结题)
- poj3984迷宫问题 入门搜索bfs
- HDU 1728 逃离迷宫(广度搜索)
- 利用非循环顺序队列采用广度搜索法求解迷宫问题(一条路径)
- 《挑战程序设计比赛》 P35 题目:迷宫的最短路径 广度搜索
- [kuangbin带你飞]专题一 简单搜索 -K - 迷宫问题
- 迷宫搜索变型——【USACO5.2.1】蜗牛的旅行
- 一个带拐点搜索的迷宫算法