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

【HDOJ】2645 find the nearest station

时间:2015-02-14 16:05:27      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:

裸BFS。

 1 /* 2645 */
 2 #include <iostream>
 3 #include <queue>
 4 #include <cstdio>
 5 #include <cstring>
 6 #include <cstdlib>
 7 using namespace std;
 8 
 9 #define MAXN 200
10 
11 typedef struct node_t {
12     int x, y;
13     node_t() {}
14     node_t(int xx, int yy) {
15         x = xx; y = yy;
16     }
17 } node_t;
18 
19 int n, m;
20 queue<node_t> Q;
21 char map[MAXN][MAXN];
22 int dist[MAXN][MAXN];
23 int dir[4][2] = {
24     -1,0,1,0,0,-1,0,1
25 };
26 
27 void bfs() {
28     int i, j, k;
29     int x, y;
30     node_t nd;
31     
32     while (!Q.empty()) {
33         nd = Q.front();
34         Q.pop();
35         for (i=0; i<4; ++i) {
36             x = nd.x + dir[i][0];
37             y = nd.y + dir[i][1];
38             if (x<0 || x>=n || y<0 || y>=m || map[x][y]==1)
39                 continue;
40             map[x][y] = 1;
41             dist[x][y] = dist[nd.x][nd.y] + 1;
42             Q.push(node_t(x, y));
43         }
44     }
45 }
46 
47 int main() {
48     int i, j, k;
49     
50     #ifndef ONLINE_JUDGE
51         freopen("data.in", "r", stdin);
52     #endif
53     
54     while (scanf("%d %d", &n, &m) != EOF) {
55         for (i=0; i<n; ++i) {
56             scanf("%s", map[i]);
57             for (j=0; j<m; ++j) {
58                 if (map[i][j] == 1) {
59                     Q.push(node_t(i, j));
60                     dist[i][j] = 0;
61                 }
62             }
63         }
64         bfs();
65         for (i=0; i<n; ++i) {
66             printf("%d", dist[i][0]);
67             for (j=1; j<m; ++j)
68                 printf(" %d", dist[i][j]);
69             printf("\n");
70         }
71     }
72     
73     return 0;
74 }

 

【HDOJ】2645 find the nearest station

标签:

原文地址:http://www.cnblogs.com/bombe1013/p/4291887.html

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