求01矩陣連通域大小(C 新華智雲筆試題)

2021-09-29 11:23:42 字數 2324 閱讀 1911

涼了,so sad.

十月份一直在整**的事兒,工作方面的東西沒看,題也沒做,結果就是碰到手撕**就掛qaq

也許碰到以前做過的型別題思路會好點,但是這個題也沒做過,就硬想,結果只想出了漏洞百出的思路。

題目如下:

問題描述:

給定乙個m*n的矩陣,裡面有數字1,0。 + 然後給定乙個座標:

(x, y)。

請寫乙個程式計算與座標x, y值相同,且連通的數字個數。

「連通」 定義為:左右或者上下數值一樣則認為這兩個塊是連通的,連通具有傳遞性。

輸入:matrix, x, y

輸出:n

舉例:輸入:

matrix =[[

1,0,

1,0]

[1,0

,0,0

][1,

1,0,

1][0

,1,0

,1][

1,1,

0,0]

}

我當時想到的思路就是去判斷目標點(x,y)周圍的十字方向的四個點是否連通,如果連通則繼續遞迴判斷。

當時手撕沒撕出來(寫的什麼稀爛**),就直接給面試官講了思路,面試官聽完回了一句,有個條件你沒提到。

然後我當時就懵了,沒想到自己已經那麼菜了。

以下內容和**主要參考這篇部落格。

這樣的無向圖遍歷問題主要採用bfs廣度優先搜尋實現。主要思路為:

實際**實現採用佇列居多,leetcode上有很多這樣的題目。**框架是:

vector<

int> tmp;

//結果

vector<

int> mask // 用於不再訪問之前訪問過的元素

queue<

int> q;

//用於儲存當前的連通域

q.push(.

..);

//將第乙個合適的解壓入

while

(! q.

empty()

)if( mask[ i+1]

==false

)//保證訪問的元素之前沒有訪問過,如果合適,就加入到佇列中

q.push(.

..)}

根據題目要求重新寫了**。

完整**為:

#include

#include

#include

#include

using

namespace std;

// 判斷該點是否已被遍歷過或是座標越界

bool

check

(vectorint>>

& matrix, vectorbool

>>

& mask,

int x,

int y,

int value)

// 如果該點未越界且未被遍歷過,則統計加1,將其加入佇列繼續檢索

void

add(vectorint>>

& matrix, vectorbool

>>

& mask, queueint,

int>>

& q,

int x,

int y,

int value,

int& result));

mask[x]

[y]=

true;}

}int

main()

,,,,

};vectorbool

>>

mask

(matrix.

size()

, vector<

bool

>

(matrix[0]

.size()

,false))

; queue int,

int>> q;

int result =1;

int x =2;

int y =2;

int value = matrix[x]

[y];

cout << value << endl;

pair<

int,

int> temp;

mask[x]

[y]=

true

; q.

push

(pair<

int,

int>);

while

(!q.

empty()

) cout << result << endl;

return0;

}

求矩陣連通域的個數

實際上是個寶石迷陣消除遊戲的簡化版,把不同顏色的寶石看成不同值的數字,然後連通超過三個的可以消除。這裡沒有加入消除後降落的機制,一定程度上簡化了問題的複雜度。那種需要每次消除後都從頭遍歷 using namespace std template t val t matrix,int w,int h,...

求連通域面積matlab

matlab有自帶函式bwreopen 求連通域,並移除小面積連通域,返回乙個mask模板不同連通域用不同的label標誌,背景用0標誌。function mask bwareopenlz lig,minarea untitled3 此處顯示有關此函式的摘要 此處顯示詳細說明 row size li...

求最大子矩陣的大小

給定乙個整型矩陣map,其中的值只有0和1兩種,求其中全是1的所有矩形區域中,最大矩形區域為1的數量。時間複雜度達到o mn 具體思路請參考原書 include include include using namespace std intmaxrecfrombottom int height,in...