floodfill演算法 建立乙個佇列q。初始時,q僅包含最開始的那個「點」,對於每個出隊的元素,把他周圍需要擴散到的元素加到佇列中。為了避免重複訪問,需要記錄每個元素是否已經訪問過,即訪問標誌。他是一種很常用的預處理方法,當「連在一起很大一塊東西可以一併處理」的時候,可以作一次floodfill,分離出乙個個「連在一起」的塊,然後再做處理。
對於本題,經驗告訴我們,「乙個桶最大的容量取決於它最短的那塊板」。所以我們先對周圍的一圈格仔進行訪問,並取其中最短具有最短長度的格仔,將其加入佇列中。然後進行floodfill,搜尋到沒有被訪問過的並且高度更低的格仔即將當前訪問的格仔與剛出隊的元素的高度差加入到答案中,並將該格仔加入到佇列中。
floodfill
floodfill演算法 建立乙個佇列q。初始時,q僅包含最開始的那個「點」,對於每個出隊的元素,把他周圍需要擴散到的元素加到佇列中。為了避免重複訪問,需要記錄每個元素是否已經訪問過,即訪問標誌。他是一種很常用的預處理方法,當「連在一起很大一塊東西可以一併處理」的時候,可以作一次floodfill,分離出乙個個「連在一起」的塊,然後再做處理。對於本題,經驗告訴我們,「乙個桶最大的容量取決於它最短的那塊板」。所以我們先對周圍的一圈格仔進行訪問,並取其中最短具有最短長度的格仔,將其加入佇列中。然後進行floodfill,搜尋到沒有被訪問過的並且高度更低的格仔即將當前訪問的格仔與剛出隊的元素的高度差加入到答案中,並將該格仔加入到佇列中。
#include
#include
#include
#include
using
namespace
std;
#define ll long long
const
int maxn = 333
;int dir[4][2] = ,,, };
struct
pan}pan;
priority_queue
q;int
n,m;
intg[maxn][maxn];
bool
vis[maxn][maxn];
ll ans;
void
init()
}void
floodfill()
else
q.push(v);}}
printf(
"%lld\n
",ans);
}int
main()
return0;
}
洪水填充演算法 洪水填充 Flood fill 演算法
洪水填充 flood fill 演算法 從乙個起始節點開始把附近與其連通的節點提取出或填充成不同顏色顏色,直到封閉區域內的所有節點都被處理過為止,是從乙個區域中提取若干個連通的點與其他相鄰區域區分開 或分別染成不同顏色 的經典演算法。因為其思路類似洪水從乙個區域擴散到所有能到達的區域而得名。在gnu...
種子填充問題
兩種連通區域 四連通區域 從區域內一點出發,可通過上 下 左 右四個方向的移動組合,在不越出區域的前提下,能到達區域內的任意畫素 八連通區域 從區域內每一畫素出發,可通過八個方向,即上 下 左 右 左上 右上 左下 右下移動的組合,在不越出區域的前提下,能到達區域內的任意畫素。基本原理 從多邊形區域...
種子填充演算法
在多邊形區域內部填充某元素。種子演算法,即從內部某一點開始填充,再遞迴填充周圍的點 上下左右 四連通 直到遇到邊界。void tianchong int x,int y,int color 在實際應用中,出現了遞迴呼叫棧溢位的情況,先在這裡留坑,下次再補上具體的資料吧。基礎演算法在實際應用中,除了上...