中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++數據結構之如何實現水洼數量算法

發布時間:2021-08-20 09:47:41 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關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 <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
#include <math.h> 
   
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<N&&0<=ny&&ny<=M&&field[nx][ny]=='W') dfs(nx, ny); 
      } 
    } 
    return; 
  } 
public: 
  void solve() { 
    int res=0; 
    for (int i=0; i<N; i++) { 
      for (int j=0; j<M; j++) { 
        if (field[i][j] == 'W') { 
          dfs(i,j); 
          res++; 
        } 
      } 
    } 
    printf("result = %d\n", res); 
  } 
}; 
   
   
int main(void) 
{ 
  Program P; 
  P.solve(); 
  return 0; 
}

輸出:

result = 3

感謝各位的閱讀!關于“C++數據結構之如何實現水洼數量算法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

富源县| 大同县| 平阴县| 明水县| 台山市| 沁阳市| 延吉市| 双辽市| 扶绥县| 昌图县| 罗定市| 宁蒗| 安丘市| 稷山县| 德州市| 道孚县| 滦南县| 莆田市| 焦作市| 高要市| 荣昌县| 岑巩县| 绥宁县| 宁乡县| 铜陵市| 齐齐哈尔市| 延吉市| 溧阳市| 盐亭县| 遂川县| 昭苏县| 仲巴县| 辽阳市| 广南县| 牡丹江市| 乌苏市| 莱阳市| 黄大仙区| 澄迈县| 永泰县| 滁州市|