C++データ構造の水たまりの数量アルゴリズム

1575 ワード

C++データ構造の水たまりの数量アルゴリズム
テーマ:N*Mの大きさの庭があって、雨の后に水が溜まりました.八連通の水たまりはつながっていると考えられる.庭に全部でどれだけの水たまりがあるかをお願いした.
深さ優先探索(DFS)を用いる、ある水たまりで、8方向からすべての連通水たまりが見つかるまで探索する.水たまりがなくなるまで次の水たまりを再指定する.全ての深さ優先探索の回数が水たまり数である.時間複雑度O(8*M*N)=O(M*N).
コード:

/* 
 * main.cpp 
 * 
 * Created on: 2014.7.12 
 *         :http://www.bianceng.cn/Programming/sjjg/
 *   Author: spike 
 */
   
#include  
#include  
#include  
#include  
   
class Program { 
  static const int MAX_N=20, MAX_M=20; 
  int N = 10, M = 12; 
  char field[MAX_N][MAX_M+1] = { 
      "W........WW.", 
      ".WWW.....WWW", 
      "....WW...WW.", 
      ".........WW.", 
      ".........W..", 
      "..W......W..", 
      ".W.W.....WW.", 
      "W.W.W.....W.", 
      ".W.W......W.", 
      "..W.......W."}; 
  void dfs(int x, int y) { 
    field[x][y] = '.'; 
    for (int dx = -1; dx <= 1; dx++) { 
      for (int dy = -1; dy <= 1; dy++) { 
        int nx = x+dx, ny = y+dy; 
        if (0<=dx&&nx 
 

出力:

result = 3

読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!