lc649 不同島嶼的數量 dfs 相對座標

2021-10-09 12:37:35 字數 942 閱讀 9462

給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通(上、下、左、右四個方向)的 1 組成,你可以認為網格的四周被海水包圍。

請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換(不可以旋轉、翻轉)和另乙個島嶼重合。

示例 1:

11000

11000

00011

00011

給定上圖,返回結果 1 。

示例 2:

11011

10000

00001

11011

給定上圖,返回結果 3 。

注意:111和

111是不同的島嶼,因為我們不考慮旋轉、翻轉操作。

求島嶼的數量思路很簡單,利用dfs演算法或者bfs演算法就可以了

難點在於怎樣判斷相同形狀的島嶼

我們可以利用相對座標的方法,即把dfs第乙個遍歷的點看作原點,其他座標的絕對座標減去這個點的座標就是該點的相對座標

例如上面的示例2,右上角島嶼的點的相對座標為(0,0)(0,1)  左下角的點的相對座標也為(0,0),(0,1),那麼這兩個島的面積形狀都是相同的,相反,左上角和右下角的島嶼的相對座標序列不一樣,雖然他們的面積相同,但是他們的形狀卻不一樣

把所有島嶼的相對座標序列用乙個set進行維護,去掉重複的序列就可以得到結果了

const int n = 55;

typedef pairpii;

class solution ,ky[4] = ;

void dfs(int x,int y,int ox,int oy));

for(int i = 0; i < 4; ++i)}}

int numdistinctislands(vector>& grid) }}

return res.size();

}};

LC200 島嶼數量

難度中等1021 給你乙個由 1 陸地 和 0 水 組成的的二維網格,請你計算網格中島嶼的數量。島嶼總是被水包圍,並且每座島嶼只能由水平方向和 或豎直方向上相鄰的陸地連線形成。此外,你可以假設該網格的四條邊均被水包圍。示例 1 輸入 grid 1 1 1 1 0 1 1 0 1 0 1 1 0 0 ...

694不同島嶼的數量

給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通 上 下 左 右四個方向 的 1 組成,你可以認為網格的四周被海水包圍。請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換 不可以旋轉 翻轉 和另乙個島嶼重合。示例 11011 10000 00...

694 不同島嶼的數量

題目描述 給定乙個非空 01 二維陣列表示的網格,乙個島嶼由四連通 上 下 左 右四個方向 的 1 組成,你可以認為網格的四周被海水包圍。請你計算這個網格中共有多少個形狀不同的島嶼。兩個島嶼被認為是相同的,當且僅當乙個島嶼可以通過平移變換 不可以旋轉 翻轉 和另乙個島嶼重合。示例 1 11000 1...