C++データ構造の水たまりの数量アルゴリズム
1575 ワード
C++データ構造の水たまりの数量アルゴリズム
テーマ:N*Mの大きさの庭があって、雨の后に水が溜まりました.八連通の水たまりはつながっていると考えられる.庭に全部でどれだけの水たまりがあるかをお願いした.
深さ優先探索(DFS)を用いる、ある水たまりで、8方向からすべての連通水たまりが見つかるまで探索する.水たまりがなくなるまで次の水たまりを再指定する.全ての深さ優先探索の回数が水たまり数である.時間複雑度O(8*M*N)=O(M*N).
コード:
出力:
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!
テーマ: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
読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!