首页 > 代码库 > 【HDOJ】2267 How Many People Can Survive
【HDOJ】2267 How Many People Can Survive
BFS。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 using namespace std; 6 7 #define MAXN 305 8 9 typedef struct node_st {10 int x, y;11 node_st() {}12 node_st(int xx, int yy) {13 x = xx; y = yy;14 }15 } node_st;16 17 char map[MAXN][MAXN];18 bool visit[MAXN][MAXN];19 int direct[4][2] = {-1,0,1,0,0,-1,0,1};20 int n, m, f, s;21 22 bool getNext(int *x, int *y) {23 for (int i=0; i<n; ++i) {24 for (int j=0; j<m; ++j) {25 if (map[i][j]!=‘#‘ && visit[i][j]==false) {26 *x = i;27 *y = j;28 return true;29 }30 }31 }32 return false;33 }34 35 void bfs() {36 queue<node_st> que;37 node_st node;38 int ff, ss, x, y;39 bool flg;40 int i;41 42 f = s = 0;43 memset(visit, false, sizeof(visit));44 while (1) {45 if (!getNext(&x, &y))46 break;47 ff = ss = 0;48 if (map[x][y] == ‘o‘) ++ff;49 if (map[x][y] == ‘v‘) ++ss;50 que.push(node_st(x, y));51 visit[x][y] = true;52 flg = false;53 54 while (!que.empty()) {55 node = que.front();56 que.pop();57 for (i=0; i<4; ++i) {58 x = node.x + direct[i][0];59 y = node.y + direct[i][1];60 if (x<0 || x>=n || y<0 || y>=m) {61 flg = true;62 continue;63 }64 if (map[x][y]!=‘#‘ && !visit[x][y]) {65 que.push(node_st(x, y));66 visit[x][y] = true;67 if (map[x][y] == ‘o‘) ++ff;68 if (map[x][y] == ‘v‘) ++ss;69 }70 }71 }72 if (!flg) {73 if (ff > ss) f += ff;74 if (ff < ss) s += ss;75 }76 }77 printf("%d %d\n", f, s);78 }79 80 int main() {81 int i;82 83 while (scanf("%d %d", &n, &m) != EOF) {84 for (i=0; i<n; ++i)85 scanf("%s", map[i]);86 bfs();87 }88 89 return 0;90 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。