UVa 572 Oil Deposits

来源:互联网 发布:python google earth 编辑:程序博客网 时间:2024/05/18 15:25

Description

经典floodfill

Algorithm

flood fill

Hint

记得判断边界

Code

#include <cstdio>#include <cstring>#include <iostream>#include <stack>using namespace std;int m, n;const int maxm = 100 + 9;const int maxn = 100 + 9;const int dx[8] = {0, 0, 1, 1, 1, -1, -1, -1};const int dy[8] = {1, -1,0, 1, -1, 0, 1, -1 };bool g[maxm][maxn];struct V{  int x, y;  V(int x, int y) : x(x), y(y) {}};void print(){  for (int i = 0; i < m; i++)  {    for (int j = 0; j < n; j++)      if (g[i][j]) cout << '@'; else cout << '*';    cout << endl;  }  cout << endl;}void solve(){  memset(g, 0, sizeof(g));  for (int i = 0; i < m; i++)  {    for (int j = 0; j < n; j++)    {      char ch;      cin >> ch;      if (ch == '@') g[i][j] = true;    }    scanf("\n");  }  int ans = 0;  for (int i = 0; i < m; i++)    for (int j = 0; j < n; j++)      if (g[i][j])      {        stack<V> s;        s.push(V(i, j));        while (!s.empty())        {          V now = s.top();          s.pop();          g[now.x][now.y] = false;          for (int k = 0; k < 8; k++)          {            int x = now.x + dx[k];            int y = now.y + dy[k];            if (x < 0 || x >= m || y < 0 || y >= n) continue;            if (g[x][y]) s.push(V(x, y));          }        }        ans++;      }  cout << ans << endl;}int main(){//  freopen("input.txt", "r", stdin);  for (;;)  {    cin >> m >> n;    if (m == 0) break;    solve();  }}
0 0
原创粉丝点击