码迷,mamicode.com
首页 > 其他好文 > 详细

hdu 2822 bfs

时间:2015-10-06 10:15:54      阅读:128      评论:0      收藏:0      [点我收藏+]

标签:

问题可以抽象为求起点到终点的最短路,其中经过x的代价是0,而经过.的代价是1,bfs的时候用优先队列即可。

 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <queue>
 5 using namespace std;
 6 
 7 const int N = 1001;
 8 char maze[N][N];
 9 bool visit[N][N];
10 int dx[] = { 0, 0, 1, -1 };
11 int dy[] = { 1, -1, 0, 0 };
12 int n, m, sx, sy, ex, ey;
13 
14 bool ok( int x, int y )
15 {
16     return x >= 0 && x < n && y >= 0 && y < m && !visit[x][y];
17 }
18 
19 struct Node 
20 {
21     int x, y, t;
22     Node(){}
23     Node( int _x, int _y, int _t )
24     {
25         x = _x, y = _y, t = _t;
26     }
27     bool operator < ( const Node & o ) const 
28     {
29         return t > o.t;
30     }
31 };
32 
33 priority_queue<Node> q;
34 
35 int bfs()
36 {
37     while ( !q.empty() ) q.pop();
38     memset( visit, 0, sizeof(visit) );
39     q.push( Node( sx, sy, 0 ) );
40     visit[sx][sy] = 1;
41     while ( !q.empty() ) 
42     {
43         Node cur = q.top();
44         q.pop();
45         if ( cur.x == ex && cur.y == ey ) return cur.t;
46         for ( int i = 0; i < 4; i++ )
47         {
48             int x = cur.x + dx[i];
49             int y = cur.y + dy[i];
50             if ( ok( x, y ) )
51             {
52                 int d = maze[x][y] == . ? 1 : 0;
53                 q.push( Node( x, y, cur.t + d ) );
54                 visit[x][y] = 1;
55             }
56         }
57     }
58     return -1;
59 }
60 
61 int main ()
62 {
63     while ( scanf("%d%d", &n, &m) != EOF )
64     {
65         if ( !n && !m ) break;
66         for ( int i = 0; i < n; i++ )
67         {
68             scanf("%s", maze[i]);
69         }
70         scanf("%d%d%d%d", &sx, &sy, &ex, &ey);
71         sx--, sy--, ex--, ey--;
72         int ans = bfs();
73         printf("%d\n", ans);
74     }
75     return 0;
76 }

 

hdu 2822 bfs

标签:

原文地址:http://www.cnblogs.com/huoxiayu/p/4856748.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!