一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。(1<=m,n<=100)?
輸入格式:
輸入:整數m,n(m行,n列)
矩陣輸出格式:
輸出:細胞的個數
這個題主要是用到了搜尋的知識
首先我們先來理解一下題意
輸入樣例#1:
4 100234500067
1034560500
2045600671
0000000089
輸出樣例#1:
4我們來看這個輸入樣例,會發現它其實是被分成了0和其他數字的一些範圍,我們要找的是非0數字的集合的個數,以乙個點的上下左右為可連線到的點,我們就能畫出這個東西
0234500067
10345
60500
2045600671
0000000089
我們可以看到所有的聯通塊總共有四個,所以細胞數目是4。
題意理解得差不多了,我們來看怎麼實現**
,首先,我們把矩陣讀入進去
這裡有兩種讀入方式
1.字元陣列讀入,判的時候需要再開乙個bool陣列來標記是細胞和不是細胞(也就是0)
2.乙個非常神奇的輸入方式,
scanf("%1d", &a[i][j]);
看到這個1d了嗎,他其實就是控制輸入場寬,來達到乙個乙個輸入的方法,然後吧,因為讀進來的是int所以應該是可以直接判真假,也就是說可以不用開bool陣列(不過為了保險起見我還是開了乙個)讀進來之後,從每乙個數字開始判,當讀到第乙個非0細胞的時候,把其座標壓進佇列並且置為0,然後對其上下左右都進行判斷,如果符合條件就也壓進佇列,每一次都把隊頭彈出,知道一次佇列完成
可能光這樣講不是太好理解,那麼我們看**
#include #include#include
#include
using
namespace
std;
bool b[101][101
];int n, m, a[101][101], ans = 0
;int dx[4] = ,
dy[4] = ;
inline
void qaq(int x, int
y) }
}}int
main()
for (int i = 1; i <= m; ++i)
for (int j = 1; j <= n; ++j)
if(b[i][j])
qaq(i, j);
printf("%d
", ans);
return0;
}
當符合條件,進行qaq(),然後按照佇列的方式來進行處理,這個題就完事啦~
P1451 求細胞數量
這是一道典型的廣搜裸題,不多說,上 const z array 1.4,1.2 of longint 1,0 1,0 0,1 0,1 var i,j,k,t,h,q longint a array 20.1000,20.1000 of char x,y,s array 2.1000 of longi...
P1451 求細胞數量
題目描述 一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。1 m,n 100 輸入輸出格式 輸入格式 輸入 整數m,n m行,n列 矩陣輸出格式 輸出 細胞的個數 輸入輸出樣例 輸入樣例 1 4 10 0234500...
P1451 求細胞數量
解讀一下題目 結合樣例 其實所有非零數字性質都是一樣的,方便起見把他們都處理為1 因此這個陣中只有0,1兩個數字 此時我們把0數字虛化 再摘下眼鏡 您會發現有4個細胞 4個小聚落 一定要注意這個樣例!一定要注意這個樣例!一定要注意這個樣例!他在輸入細胞的時候,是把他當做乙個字串輸入的 泥看每個數字之...