日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法提高课-搜索-Flood fill算法-AcWing 1097. 池塘计数:flood fill、bfs

發布時間:2025/4/5 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法提高课-搜索-Flood fill算法-AcWing 1097. 池塘计数:flood fill、bfs 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Flood fill 算法簡介:

像洪水一樣,一圈一圈往外蔓延,像bfs。

flood fill 算法可以在線性復雜度內,找到某個點所在的連通塊。

題目分析


來源:acwing

ac代碼

#include<bits/stdc++.h> using namespace std; #define x first #define y secondtypedef pair<int, int> PII;const int N = 1010, M = N * N; int n, m; char g[N][N]; PII q[M]; // bfs用的隊列:數組模擬隊列 bool st[N][N]; // 某點是否遍歷過// 數組模擬隊列 void bfs(int sx, int sy){int hh = 0, tt = 0;q[0] = {sx, sy};st[sx][sy] = true;while( hh <= tt){ // 隊列不空時PII t = q[hh ++];// 遍歷周圍8個相鄰點for(int i = t.x -1 ; i <= t.x + 1; i++)for(int j = t.y -1; j <= t.y +1; j ++){// 當前點跳過if(i == t.x && j == t.y) continue;//位置不合法跳過if( i < 0 || i >= n || j <0 || j >= m) continue;// 不是水,跳過; 或者已經遍歷過,跳過if(g[i][j] == '.' || st[i][j]) continue;// 該點壓入隊列,并標記為遍歷過q[++ tt] = {i ,j};st[i][j] = true;}} }int main(){scanf("%d%d",&n, &m);// 讀入1行沒有空格,當作字符串來讀for(int i = 0; i < n; i++) scanf("%s", g[i]);int cnt = 0; // 統計連通塊的個數for(int i = 0; i < n; i++)for( int j = 0; j < m; j ++)if( g[i][j] == 'W' && !st[i][j]){bfs(i, j); // 以(i,j)為起點進行bfscnt ++;}cout << cnt << endl; }

題目來源

https://www.acwing.com/problem/content/1099/

總結

以上是生活随笔為你收集整理的算法提高课-搜索-Flood fill算法-AcWing 1097. 池塘计数:flood fill、bfs的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。