最大黑區域

2021-09-14 05:01:16 字數 1265 閱讀 1988

題目描述

二值影象是由黑白兩種畫素組成的矩形點陣,影象識別 的乙個操作是求出影象中最大的黑區域的面積。請設計乙個程式完成二值影象的這個操作,黑區域由黑畫素組成,乙個黑區域中的每畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上下左右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。乙個黑區域的面積是其所包含的畫素數。

輸入第一行兩個正整數n和m,1<=n,m<=100,分別表示二值影象的行數與列數。

後面緊跟著n行,每行含m個整數0或1,其中第i行表示影象的第i行的m畫素,0表示白畫素,1表示黑畫素。

輸出一行乙個數,表示相應的影象中最大黑區域的面積;

一、解題思路:

因為是求最大值,所以肯定用深搜。

首先用二重迴圈找到乙個黑畫素,再使用深搜統計黑區域裡黑畫素的個數,找到乙個ans++,

最後進行打擂,找到最大值。但是需要注意的是:萬一乙個黑畫素也沒有!

所以,我們需要設乙個布林變數flag,開始為0,若二重迴圈搜到黑畫素時flag變為1,最後

判斷flag是否變為1就ok啦!

二、源**

#include

#define pi -2147483647

using namespace std;

const

int maxn=

1e2+10;

int a[maxn]

[maxn]

;bool judge[maxn]

[maxn]

;//染色陣列

int ans;

//解

int n,m;

bool flag=false;

//判斷是否有黑區域

int maxx=pi;

//最大值先變為乙個很小的數

void

dfs(

int x,

int y)

intmain()

}for

(int i=

1;i<=n;i++

)for

(int j=

1;j<=m;j++)if

(judge[i]

[j])

//二重迴圈找黑畫素 if(

!flag)

printf

("%d\n"

,ans)

;else

printf

("%d\n"

,maxx)

;}

A 最大黑區域

problem 1082 最大黑區域 二值影象是由黑白兩種畫素組成的矩形點陣,影象識別的乙個操作是求出影象中最大黑區域的面積。請設計乙個程式完成二值影象的這個操作。黑區域由黑畫素組成,乙個黑區域中的每個畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上 下 左 右的畫素相鄰。兩個不同的黑區域沒...

最大黑區域

fzu 1082 二值影象是由黑白兩種畫素組成的矩形點陣,影象識別的乙個操作是求出影象中最大黑區域的面積。請設計乙個程式完成二值影象的這個操作。黑區域由黑畫素組成,乙個黑區域中的每個畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上 下 左 右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。乙個黑...

FOJ Problem 1082 最大黑區域

題目大意 設計乙個程式尋找最大黑區域。黑區域由黑畫素組成,乙個黑區域中的每個畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上 下 左 右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。乙個黑區域的面積是其所包含的畫素的個數。解題思路 簡單的深度優先搜尋問題,由乙個黑色畫素點開始搜尋直到沒有黑色畫...