給定乙個非空 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...