HDU 1180 诡异的楼梯
2012-02-12 10:33
330 查看
http://acm.hdu.edu.cn/showproblem.php?pid=1180
BFS
View Code
BFS
View Code
#include <cstdio> #include <cstring> #include <queue> using namespace std; const int N=100; const int dx[4]={0,1,0,-1}; const int dy[4]={1,0,-1,0}; char maze ; int vis [2]; int n,m,p,t; struct sta { int x,y,dis; }; queue<sta> q; int bfs(int x,int y) { while (!q.empty()) q.pop(); vis[x][y][0]=1; sta u={x,y,0}; q.push(u); while (!q.empty()) { u=q.front(); q.pop(); int x,y,dis,d,nx,ny; x=u.x; y=u.y; dis=u.dis; if (maze[x][y]=='T') return dis; if (!vis[x][y][(dis+1)%2]) { vis[x][y][(dis+1)%2]=1; sta v={x,y,dis+1}; q.push(v); } for (d=0;d<4;d++) { nx=x+dx[d]; ny=y+dy[d]; if (maze[nx][ny]=='|') { if (d%2!=dis%2) {nx+=dx[d]; ny+=dy[d];} else continue; } if (maze[nx][ny]=='-') { if (d%2==dis%2) {nx+=dx[d]; ny+=dy[d];} else continue; } if (vis[nx][ny][(dis+1)%2] || !maze[nx][ny] || maze[nx][ny]=='*') continue; vis[nx][ny][(dis+1)%2]=1; sta v={nx,ny,dis+1}; q.push(v); } } return 0; } int main() { int i,j,x,y,ans; while (~scanf("%d%d",&n,&m)) { memset(vis,0,sizeof(vis)); memset(maze,0,sizeof(maze)); for (i=1;i<=n;i++) scanf("%s",maze[i]+1); for (i=1;i<=n;i++) for (j=1;j<=m;j++) if (maze[i][j]=='S') {x=i; y=j;} ans=bfs(x,y); printf("%d\n",ans); } return 0; }
相关文章推荐
- hdu1180诡异的楼梯【优先队列+广搜】
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯
- hdu 1180 诡异的楼梯 BFS+优先队列
- HDU 1180 诡异的楼梯
- 诡异的楼梯 hdu 1180
- HDU 1180 诡异的楼梯(BFS+奇偶步数判断)
- Hdu-1180(诡异的楼梯)
- hdu 1180:诡异的楼梯(BFS广搜)
- D - 诡异的楼梯-1180-HDU
- HDU1180——诡异的楼梯(BFS+优先队列)
- HDU 1180诡异的楼梯
- HDU-1180-诡异的楼梯
- hdu 1180 诡异的楼梯
- HDU-1180 诡异的楼梯
- hdu 1180 诡异的楼梯 楼梯可以变方向的搜索题
- 方向搜索hdu 1180 诡异的楼梯 楼梯可以变方向的搜索题
- HDU--杭电--1180--诡异的楼梯--广搜--蛋疼的流氓讲师今天弄完了这楼梯,想说的是理清思路就好,这题原来这么水
- HDU 1180-诡异的楼梯
- HDU 1180 (诡异的楼梯)+HDU 2102 (A计划)