-
-
Notifications
You must be signed in to change notification settings - Fork 291
Expand file tree
/
Copy path711.cpp
More file actions
65 lines (62 loc) · 2.56 KB
/
711.cpp
File metadata and controls
65 lines (62 loc) · 2.56 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
__________________________________________________________________________________________________
class Solution {
public:
int numDistinctIslands2(vector<vector<int>>& grid) {
int row_num = grid.size(), col_num = grid[0].size();
set<vector<pair<int, int>>> islands;
for (int r = 0; r < row_num; ++r) {
for (int c = 0; c < col_num; ++c) {
if (grid[r][c] == 1) {
vector<pair<int, int>> island;
DFS(grid, r, c, r, c, island);
islands.insert(normalize(island));
}
}
}
return islands.size();
}
private:
void DFS(vector<vector<int>> &grid, int r0, int c0, int r, int c, vector<pair<int, int>> &island) {
int row_num = grid.size(), col_num = grid[0].size();
if (r < 0 || r >= row_num || c < 0 || c >= col_num || grid[r][c] <= 0) {
return;
}
grid[r][c] = -1;
island.push_back(make_pair(r - r0, c - c0));
for (int d = 0; d < 4; ++d) {
DFS(grid, r0, c0, r + delta[d][0], c + delta[d][1], island);
}
}
vector<pair<int, int>> normalize(vector<pair<int, int>> &a) {
vector<vector<pair<int, int>>> ret(8, vector<pair<int, int>>());
for (auto &p : a) {
int x = p.first, y = p.second;
ret[0].push_back(make_pair(x, y));
ret[1].push_back(make_pair(x, -y));
ret[2].push_back(make_pair(-x, y));
ret[3].push_back(make_pair(-x, -y));
ret[4].push_back(make_pair(y, x));
ret[5].push_back(make_pair(y, -x));
ret[6].push_back(make_pair(-y, x));
ret[7].push_back(make_pair(-y, -x));
}
for (int i = 0; i < 8; ++i) {
sort(ret[i].begin(), ret[i].end());
int r_offset = 0 - ret[i][0].first, c_offset = 0 - ret[i][0].second;
for (int j = 0; j < ret[i].size(); ++j) {
ret[i][j].first += r_offset;
ret[i][j].second += c_offset;
}
}
sort(ret.begin(), ret.end());
return ret[0];
}
int delta[4][2] = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}};
};
---------------------
作者:魔豆Magicbean
来源:CSDN
原文:https://blog.csdn.net/magicbean2/article/details/79282937
版权声明:本文为博主原创文章,转载请附上博文链接!
__________________________________________________________________________________________________
__________________________________________________________________________________________________