POJ 2386 解题报告

来源:互联网 发布:无锡加工中心编程招聘 编辑:程序博客网 时间:2024/05/21 14:55

这道题是简单的DFS题。

2386Accepted548K0MSC++1230B

/* ID: thestor1 LANG: C++ TASK: poj2386 */#include <iostream>#include <fstream>#include <cmath>#include <cstdio>#include <cstring>#include <limits>#include <string>#include <vector>#include <list>#include <set>#include <map>#include <queue>#include <stack>#include <algorithm>#include <cassert>using namespace std;int dx[8] = {-1, -1, 0, 1, 1, 1, 0, -1}, dy[8] = {0, 1, 1, 1, 0, -1, -1, -1};void dfs(int r, int c, std::vector<std::vector<char> > &grid, const int N, const int M){grid[r][c] = 'X';for (int d = 0; d < 8; ++d){int nr = r + dx[d], nc = c + dy[d];if (0 <= nr && nr < N && 0 <= nc && nc < M && grid[nr][nc] == 'W'){dfs(nr, nc, grid, N, M);}}}int main(){int N, M;scanf("%d%d", &N, &M);std::vector<std::vector<char> > grid(N, std::vector<char>(M, '.'));char line[101];for (int i = 0; i < N; ++i){scanf("%s", line);for (int j = 0; j < M; ++j){grid[i][j] = line[j];}}int cnt = 0;for (int i = 0; i < N; ++i){for (int j = 0; j < M; ++j){if (grid[i][j] == 'W'){dfs(i, j, grid, N, M);cnt++;}}}printf("%d\n", cnt);return 0;  }


0 0