題目描述
二值影象是由黑白兩種畫素組成的矩形點陣,影象識別 的乙個操作是求出影象中最大的黑區域的面積。請設計乙個程式完成二值影象的這個操作,黑區域由黑畫素組成,乙個黑區域中的每畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上下左右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。乙個黑區域的面積是其所包含的畫素數。
輸入第一行兩個正整數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 最大黑區域
題目大意 設計乙個程式尋找最大黑區域。黑區域由黑畫素組成,乙個黑區域中的每個畫素至少與該區域中的另乙個畫素相鄰,規定乙個畫素僅與其上 下 左 右的畫素相鄰。兩個不同的黑區域沒有相鄰的畫素。乙個黑區域的面積是其所包含的畫素的個數。解題思路 簡單的深度優先搜尋問題,由乙個黑色畫素點開始搜尋直到沒有黑色畫...