diff --git a/200-number-of-islands/memo.md b/200-number-of-islands/memo.md new file mode 100644 index 0000000..0ed407d --- /dev/null +++ b/200-number-of-islands/memo.md @@ -0,0 +1,12 @@ +### step1 + +実装方法がわからなかったのでChatGPTを利用。 +for文を回して'1'のマスに当たるたびに、countを増やしてdfsで隣接するマスをすべて'0'にすることを繰り返すだけだった。 + +### step2 + +変更点なし。 + +### step3 + +3回通すまで書き直し。 diff --git a/200-number-of-islands/step1.cpp b/200-number-of-islands/step1.cpp new file mode 100644 index 0000000..438a264 --- /dev/null +++ b/200-number-of-islands/step1.cpp @@ -0,0 +1,32 @@ +class Solution { +public: + int m, n; + + void dfs(vector>& grid, int x, int y) { + if (x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == '0') { + return; + } + grid[x][y] = '0'; + + dfs(grid, x + 1, y); + dfs(grid, x - 1, y); + dfs(grid, x, y + 1); + dfs(grid, x, y - 1); + } + + int numIslands(vector>& grid) { + m = grid.size(); + n = grid[0].size(); + int count = 0; + + for(int i = 0; i < m; i++) { + for(int j = 0; j < n; j++) { + if (grid[i][j] == '1') { + count++; + dfs(grid, i, j); + } + } + } + return count; + } +}; diff --git a/200-number-of-islands/step2.cpp b/200-number-of-islands/step2.cpp new file mode 100644 index 0000000..438a264 --- /dev/null +++ b/200-number-of-islands/step2.cpp @@ -0,0 +1,32 @@ +class Solution { +public: + int m, n; + + void dfs(vector>& grid, int x, int y) { + if (x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == '0') { + return; + } + grid[x][y] = '0'; + + dfs(grid, x + 1, y); + dfs(grid, x - 1, y); + dfs(grid, x, y + 1); + dfs(grid, x, y - 1); + } + + int numIslands(vector>& grid) { + m = grid.size(); + n = grid[0].size(); + int count = 0; + + for(int i = 0; i < m; i++) { + for(int j = 0; j < n; j++) { + if (grid[i][j] == '1') { + count++; + dfs(grid, i, j); + } + } + } + return count; + } +}; diff --git a/200-number-of-islands/step3.cpp b/200-number-of-islands/step3.cpp new file mode 100644 index 0000000..438a264 --- /dev/null +++ b/200-number-of-islands/step3.cpp @@ -0,0 +1,32 @@ +class Solution { +public: + int m, n; + + void dfs(vector>& grid, int x, int y) { + if (x < 0 || x >= m || y < 0 || y >= n || grid[x][y] == '0') { + return; + } + grid[x][y] = '0'; + + dfs(grid, x + 1, y); + dfs(grid, x - 1, y); + dfs(grid, x, y + 1); + dfs(grid, x, y - 1); + } + + int numIslands(vector>& grid) { + m = grid.size(); + n = grid[0].size(); + int count = 0; + + for(int i = 0; i < m; i++) { + for(int j = 0; j < n; j++) { + if (grid[i][j] == '1') { + count++; + dfs(grid, i, j); + } + } + } + return count; + } +};