hdu 1242 BFS
2013-03-24 11:33
225 查看
//直接从a向r搜索,不需要用优先队列 #include <iostream> #include <queue> #include <cstring> using namespace std; typedef struct { int x; int y; int step; }point; int N,M; char map[205][205]; bool visited[205][205]; int s_x,s_y; int dirX[4] = {-1,0,1,0}; int dirY[4] = {0,1,0,-1}; bool flag; int BFS() { point p; p.x = s_x; p.y = s_y; visited[p.x][p.y] = true; p.step = 0; queue<point> Q; Q.push(p); while(!Q.empty()) { point q; q = Q.front(); Q.pop(); for(int i = 0; i < 4; i++) { point t; t.x = q.x + dirX[i]; t.y = q.y + dirY[i]; if(t.x < 0 || t.x >= N || t.y < 0 || t.y >= M || map[t.x][t.y] == '#' || visited[t.x][t.y]) { continue; } visited[t.x][t.y] = true; if(map[t.x][t.y] == 'r') { flag = true; t.step = q.step + 1; return t.step; } if(map[t.x][t.y] == '.') { t.step = q.step + 1; Q.push(t); } if(map[t.x][t.y] == 'x') { t.step = q.step + 2; Q.push(t); } } } return 0; } int main() { while(cin>>N>>M) { for(int i = 0; i < N; i++) { for(int j = 0; j < M; j++) { cin>>map[i][j]; if(map[i][j] == 'a') { s_x = i; s_y = j; } } } memset(visited,false,sizeof(visited)); flag = false; int ans = BFS(); if(flag) { cout<<ans<<endl; } else { cout<<"Poor ANGEL has to stay in the prison all his life."<<endl; } } return 0; }
相关文章推荐
- HDU 1242 Rescue(DFS or BFS)
- HDU 1242 Rescue(优先队列 + 多源BFS)
- 【BFS】hdu 1242 Rescue
- HDU 1242 Rescue【BFS+优先队列】
- HDU-1242-Rescue(优先队列+BFS)
- HDU 1242 -Rescue (双向BFS)&&( BFS+优先队列)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- HDU 1242 Rescue(BFS)
- hdu 1242 Rescue(BFS优先队列)
- 模板:HDU 1242: Rescue: (BFS DFS)
- hdu 1242 Rescue(bfs)
- hdu 1242 Rescue(优先队列 && 广搜BFS)
- ZOJ 1649 && HDU 1242 Rescue (BFS)
- HDU1242 Rescue 【BFS】
- hdu 1242 Rescue BFS搜索
- HDU 1242 Rescue(营救)(优先队列+BFS)
- hdu1242 Rescue 优先队列BFS
- hdu 1242 优先队列的bfs
- hdu 1242 BFS
- hdu 1242 Rescue(优先队列 && 广搜BFS)