HDU 2612 Find a way
2012-03-02 14:51
417 查看
这是一个双向搜索题,我用BFS把所有的点都搜索到;再进行两次搜索的比较;
#include<cstdio> #include<cstring> #include<iostream> using namespace std; class Node { public: int x , y ; int step; int num; }; Node queue[80024]; int step[2][204][204],N,M; int d[4][2] = { 0,1,1,0,-1,0,0,-1 }; char map[204][204]; int BFS( int x1,int y1, int x2 ,int y2 ) { int min = 0X7fffffff; int first = 0 , end = 0; Node t ; t.x = x1; t.y = y1; t.step = 0 , t.num = 0; queue[end] = t; end++; t.x = x2; t.y = y2; t.step = 0 , t.num = 1; queue[end] =t; end++; step[0][x1][y1] = 0; step[1][x2][y2] = 0; while( first < end ) { t = queue[ first ]; for( int i = 0; i < 4 ; i++ ) { int dx = d[i][0] + t.x; int dy = d[i][1] + t.y; if( step[t.num][dx][dy]==-1 ) { if( map[dx][dy] !='#'&&map[dx][dy] != 0) { step[t.num][dx][dy] = t.step + 1; queue[end].x = dx; queue[end].y = dy; queue[end].num = t.num; queue[end].step = t.step + 1; end++; } } } first++; } for( int i = 1 ; i <= N ; i++) for( int j = 1 ; j<=M ; j++ ) { if( map[i][j]=='@'&&step[0][i][j]!=-1&&step[1][i][j]!=-1 )//判断该点是否合法 { if( step[0][i][j]+step[1][i][j]<min ) min = step[0][i][j]+step[1][i][j]; // printf( "%d %d\n",step[0][i][j],step[1][i][j] ); } } return min*11; } int main( ) { int x1,y1,x2,y2; while( scanf( "%d%d",&N, &M )==2 ) { memset( map , 0 ,sizeof( map ) ); memset( step , -1 ,sizeof( step ) ); for( int i = 1 ; i<= N ; i++ ) { scanf( "%s", map[i]+1 ); for( int j = 1 ; j<=M ; j++ ) { if( map[i][j]=='M' ) { x1 = i; y1 = j; } else if( map[i][j]=='Y' ) { x2 = i; y2 = j; } } } printf( "%d\n",BFS( x1, y1 ,x2 ,y2 ) ); } return 0; }
相关文章推荐
- Hdu 2612 Find a way(bfs)
- HDU 2612 Find A Way
- 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(BFS + 最短路)
- HDU 2612 Find a way
- HDU 2612 Find a way
- HDU2612 Find a way —— BFS
- HDU 2612 Find a way
- HDU-2612-Find a way
- HDU 2612 Find a way
- hdu 2612 find a way
- HDU 2612 Find a way【bfs】
- HDU 2612 Find a way
- hdu 2612(bfs)Find a way
- [HDU](2612)Find a way ---bfs
- HDU 2612 Find a way
- hdu 2612 Find a way