HDU 2612 Find A Way
2013-05-10 16:08
447 查看
http://acm.hdu.edu.cn/showproblem.php?pid=2612
#include <cstdio> #include <cstring> #include <algorithm> #include <iostream> #include <queue> using namespace std; const int MAX=202; int dis_Y[MAX][MAX],dis_M[MAX][MAX]; int dir[5][3]={{-1,0},{0,-1},{0,1},{1,0}}; struct Node { int x,y,dis; }; char map[MAX][MAX]; bool vis[MAX][MAX]; void Pretreatment(int n,int m) { for(int j = 0;j <= m+1;j++) { map[0][j] = '#'; map[n+1][j] = '#'; } for(int i = 0;i <= n+1;i++) { map[i][0] = '#'; map[i][m+1] = '#'; } } void BFS_Y(int u,int v) { queue <Node>Q; Node p,node; p.x = u; p.y = v; p.dis = 0; memset(dis_Y,0,sizeof(int)); memset(vis,false,sizeof(vis)); Q.push(p); vis[u][v] = true; while(!Q.empty()) { p = Q.front();Q.pop(); for(int i=0;i<4;i++) { node.x = p.x+dir[i][0]; node.y = p.y+dir[i][1]; node.dis = p.dis + 1; if(!vis[node.x][node.y] && map[node.x][node.y]!='#') { vis[node.x][node.y] = true; dis_Y[node.x][node.y] = node.dis; Q.push(node); } } } } void BFS_M(int u,int v) { queue <Node>Q; Node p,node; p.x = u; p.y = v; p.dis=0; memset(vis,false,sizeof(vis)); memset(dis_M,0,sizeof(int)); Q.push(p); vis[u][v] = true; while(!Q.empty()) { p=Q.front(); Q.pop(); for(int i = 0;i < 4;i++) { node.x = p.x + dir[i][0]; node.y = p.y + dir[i][1]; node.dis = p.dis + 1; if(!vis[node.x][node.y]&&map[node.x][node.y]!='#') { vis[node.x][node.y] = true; dis_M[node.x][node.y]=node.dis; Q.push(node); } } } } int main() { int n,m; while(~scanf("%d%d",&n,&m)) { for(int i = 1;i <= n; i++) scanf("%s",map[i]+1); Pretreatment(n,m); for(int i = 1;i <= n; i++) for(int j = 1;j <= m; j++) { if(map[i][j] == 'Y') BFS_Y(i,j); else if(map[i][j] == 'M') BFS_M(i,j); } int minm=999999; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) { if(map[i][j]=='@'&&dis_Y[i][j]&&dis_M[i][j]) { minm=min(minm,dis_Y[i][j]+dis_M[i][j]); } } cout<<(minm*11)<<endl; } return 0; }
相关文章推荐
- HDU 2612 Find a way BFS
- hdu 2612 Find a way(广搜)
- HDU 2612 Find a way
- HDU - 2612 Find a way(广搜*2)
- [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜
- hdu 2612 Find a way
- HDU 2612 Find a way
- HDU 2612 Find a way bfs 难度:1
- HDU - 2612 Find a way(KFC)
- hdu 2612 Find a way(BFS)
- hdu 2612 Find a way (BFS)
- HDU-2612 Find a way
- hdu 2612 Find a way(双向bfs)
- HDU 2612 Find a way (BFS)
- HDU 2612 Find a way
- HDU 2612 Find a way
- HDU 2612 Find a way(双BFS) (N)
- hdu 2612 Find a way(BFS)
- HDU-2612-Find a way(BFS)
- 【HDU 2612 Find a Way(BFS)】(兼BFS入门笔记)