P1451 求細胞數量

2022-04-12 06:54:22 字數 1529 閱讀 6232

一矩形陣列由數字0到9組成,數字1到9代表細胞,細胞的定義為沿細胞數字上下左右若還是細胞數字則為同一細胞,求給定矩形陣列的細胞個數。(1<=m,n<=100)?

輸入格式:

輸入:整數m,n(m行,n列)

矩陣輸出格式:

輸出:細胞的個數

這個題主要是用到了搜尋的知識

首先我們先來理解一下題意

輸入樣例#1:

4  10

0234500067

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個小聚落 一定要注意這個樣例!一定要注意這個樣例!一定要注意這個樣例!他在輸入細胞的時候,是把他當做乙個字串輸入的 泥看每個數字之...