DFS實現floodfill演算法

2021-08-21 12:28:46 字數 1359 閱讀 3970

多組案例,每組案例輸入乙個m行n列的字元矩陣,統計字元『@』組成多少個連通塊。如果兩個字元『@』所在的格仔相鄰(橫、豎或對角線),則說明它們屬於同一連通塊。

sample input

1 1

*3 5

*@*@*

**@**

*@*@*

1 8@@****@*

5 5****@

*@@*@

*@**@

@@@*@

@@**@

0 0

sample output

012

2

1.找到油田,然後通過迴圈遍歷他周圍的八個位置,不斷呼叫dfs函式,如果連通,則講連通分量標號

2.迴圈,找沒標記過的油田,然後繼續進行1,標號增加

3.油田均已標記完,此時輸出標號,就是連通塊個數

怎麼寫bfs:

結束遞迴的條件有兩個,乙個是超過了格仔的範圍,另乙個是之前曾經出現過,以及這個格仔不是油田。找的話每個油田做標號,是同一聯通區域的標上一樣的號,最後輸出最終的標號即可。呼叫時機:if(idx[i][j]==0&&pic[i][j]==』@』)這個數沒標記過,而且屬於油田。bfs裡面用兩個for迴圈直接把他八個方向都掃瞄了一遍,並且如果滿足條件就進行初始化,此時如果在同乙個連通區域他們的值是相同的,所以main裡呼叫bfs時一定是發現了不同的連通區域,如果要求不同連通區域個數,就只用在main裡面更改cnt的個數

#include

#include

using

namespace

std;

const

int maxn = 100+5;

char pic[maxn][maxn];

int m,n,idx[maxn][maxn];

void dfs(int r,int c,int id)

int main()

return

0;}

也可以寫八條dfs呼叫

#include

#include

using

namespace

std;

#define maxn 105

char a[maxn][maxn];

bool vis[maxn][maxn];

int n,m;

void dfs(int x,int y)

int main()

printf("%d\n",sum);

}return

0;}

洪水填充演算法 洪水填充 Flood fill 演算法

洪水填充 flood fill 演算法 從乙個起始節點開始把附近與其連通的節點提取出或填充成不同顏色顏色,直到封閉區域內的所有節點都被處理過為止,是從乙個區域中提取若干個連通的點與其他相鄰區域區分開 或分別染成不同顏色 的經典演算法。因為其思路類似洪水從乙個區域擴散到所有能到達的區域而得名。在gnu...

洛谷 P1092 蟲食算(dfs)

題目傳送 這題的官方題解是高斯消元,可是本蒟蒻不會。講一下深搜的方法 1.搜尋從第一位的值開始搜,直到最後一位,判斷是否合法。2.注意剪枝防tle。3.三個數都是n位,最高位不能有進製。include include include using namespace std const int max...

蟲食算(DFS剪枝老噁心的題)

所謂蟲食算,就是原先的算式中有一部分被蟲子啃掉了,需要我們根據剩下的數字來判定被啃掉的字母。來看乙個簡單的例子 43 9865 045 8468 6633 44445506978 其中 號代表被蟲子啃掉的數字。根據算式,我們很容易判斷 第一行的兩個數字分別是5和3,第二行的數字是5。現在,我們對問題...