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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

算法提高课-搜索-Flood fill算法-AcWing 1106. 山峰和山谷:flood fill、bfs

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

題目分析



來源:acwing

分析:這道題還是flood fill算法的應用,不同點在于八個方向掃描,習慣性采用二重循環來掃描周圍的8個方向;其次,這里需要統計周圍比它高的和比它矮的,這點用bool變量來統計即可。

ac代碼

#include<bits/stdc++.h> #define x first #define y second using namespace std; const int N = 1010, M = N *N; typedef pair<int,int> PII; PII q[M]; int n; bool st[N][N]; int g[N][N];// BFS傳的是引用, void bfs(int sx, int sy, bool& has_higher, bool& has_lower){int hh = 0, tt = 0;q[0] = {sx, sy};st[sx][sy]= true;while( hh <= tt){PII t = q[hh ++];for(int i = t.x-1; i <= t.x +1; i ++)for(int j = t.y -1; j <= t.y +1; j++){if(i < 0 || i >= n || j < 0 || j >= n) continue;if( g[i][j] != g[t.x][t.y]){ // 這是周圍的// 周圍有個高的if( g[i][j] > g[t.x][t.y]) has_higher = true;// 周圍個矮的else has_lower = true;}// 這是連通塊else if( ! st[i][j]){q[ ++ tt] = {i,j};st[i][j] = true;}}} } int main(){cin >> n;int cnt = 0;for(int i = 0; i< n; i ++)for(int j = 0; j < n; j++)cin >> g[i][j];int peak = 0, valley = 0;for(int i = 0; i < n; i++)for(int j = 0; j < n; j++)//對于每個未遍歷過的點,統計連通塊if(!st[i][j]){bool has_higher = false, has_lower = false;bfs(i, j, has_higher, has_lower);//周圍沒有更高的,則山峰++if(!has_higher) peak ++;//周圍沒有更矮的,則山谷++if(!has_lower) valley++;}cout << peak <<" " << valley << endl; }

題目來源

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

總結

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

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