poj 1979 [ BFS 32ms 数据范围的事,可能造成 dfs 比 bfs 快了! ]

来源:互联网 发布:淘宝男裤店铺推荐 编辑:程序博客网 时间:2024/05/16 00:43
#include <iostream>#include <string>#include <cstring>#include <cstdlib>#include <cstdio>#include <cmath>#include <vector>#include <stack>#include <deque>#include <queue>#include <bitset>#include <list>#include <map>#include <set>#include <iterator>#include <algorithm>#include <functional>#include <utility>#include <sstream>#include <climits>#include <cassert>#define MID(x,y) ( ( x + y ) >> 1 )#define L(x) ( x << 1 )#define R(x) ( x << 1 | 1 )#define BUG puts("here!!!");#define STOP system("pause");using namespace std;const int N = 25;string mat[N];struct Point {int x, y;};int n, m, ans;int dx[] = {-1, 1, 0, 0};int dy[] = {0, 0, 1, -1};bool ok(int i, int j) {return (i >= 0 && i < n && j >= 0 && j < m && mat[i][j] != '#');}queue<Point> Q;Point you;void bfs() {Point nex;Q.push(you);ans = 1;while(!Q.empty()) {Point t = Q.front();Q.pop();for(int i = 0; i < 4; i++) {nex.x = t.x + dx[i];nex.y = t.y + dy[i];if(ok(nex.x, nex.y)) {mat[nex.x][nex.y] = '#';++ans;Q.push(nex);}}}cout << ans << endl;}int main() {while(cin >> m >> n, m | n) {for(int i = 0; i < n; i++) {cin >> mat[i];for(int j = 0; j < m; j++) {if(mat[i][j] == '@') {you.x = i;you.y = j;mat[i][j] = '#';break;}}}bfs();}return 0;}