#include int islandPerimeter(int m, int n, int grid[m][n]){ int perimeter = 0; // If only one island return 4 if (m == 1 && n == 1){ return 4; } // If one horizontal island if (m == 1){ for (int j = 0; j < n; j++){ if (grid[0][j] == 1){ if (j == 0){ perimeter += 4 - grid[0][1]; } else if (j == n - 1){ perimeter += 4 - grid[0][n - 2]; } else{ perimeter += 4 - grid[0][j - 1] - grid[0][j + 1]; } } } return perimeter; } // If one vertical island if (n == 1){ for (int j = 0; j < m; j++){ if (grid[j][0] == 1){ if (j == 0){ perimeter += 4 - grid[1][0]; } else if (j == m - 1){ perimeter += 4 - grid[m - 2][0]; } else{ perimeter += 4 - grid[j - 1][0] - grid[j + 1][0]; } } } return perimeter; } // All the other cases for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++){ if (grid[i][j] == 1){ if (i == 0){ if (j == 0){ perimeter += 4 - grid[i + 1][j] - grid[i][j + 1]; } else if (j == n - 1){ perimeter += 4 - grid[i + 1][j] - grid[i][j - 1]; } else{ perimeter += 4 - grid[i + 1][j] - grid[i][j - 1] - grid[i][j + 1]; } } else if (i == m - 1){ if (j == 0){ perimeter += 4 - grid[i - 1][j] - grid[i][j + 1]; } else if (j == n - 1){ perimeter += 4 - grid[i - 1][j] - grid[i][j - 1]; } else{ perimeter += 4 - grid[i - 1][j] - grid[i][j - 1] - grid[i][j + 1]; } } else{ perimeter += 4 - grid[i + 1][j] - grid[i - 1][j] - grid[i][j - 1] - grid[i][j + 1]; } } } } return perimeter; }