Given an m x n matrix of distinct numbers, return all lucky numbers in the matrix in any order.
A lucky number is an element of the matrix such that it is the minimum element in its row and maximum in its column.
Example 1:
Input: matrix = [[3,7,8],[9,11,13],[15,16,17]] Output: [15] Explanation: 15 is the only lucky number since it is the minimum in its row and the maximum in its column.
Example 2:
Input: matrix = [[1,10,4,2],[9,3,8,7],[15,16,17,12]] Output: [12] Explanation: 12 is the only lucky number since it is the minimum in its row and the maximum in its column.
Example 3:
Input: matrix = [[7,8],[1,2]] Output: [7] Explanation: 7 is the only lucky number since it is the minimum in its row and the maximum in its column.
Constraints:
m == mat.lengthn == mat[i].length1 <= n, m <= 501 <= matrix[i][j] <= 105.program main
    implicit none
    integer, parameter :: m = 3, n = 3
    integer, dimension(m, n) :: matrix
    integer, dimension(:), allocatable :: lucky_numbers
    matrix = reshape([3, 7, 8, &
                       9, 11, 13, &
                       15, 16, 17], shape(matrix))
    call solve(matrix, lucky_numbers)
    write (*, '(A, *(I0, :, A))') 'Lucky numbers: ', lucky_numbers
contains
    subroutine solve(mat, lucky_nums)
        implicit none
        integer, intent(in) :: mat(:, :)
        integer, allocatable, intent(out) :: lucky_nums(:)
        integer :: i, j, min_row, max_col
        allocate (lucky_nums(size(mat)))
        do i = 1, size(mat, 1)
            min_row = mat(i, 1)
            max_col = mat(1, i)
            do j = 2, size(mat, 2)
                if (mat(i, j) < min_row) then
                    min_row = mat(i, j)
                else if (mat(i, j) > max_col) then
                    max_col = mat(i, j)
                end if
            end do
            if (min_row == mat(i, 1) .and. max_col == mat(1, i)) then
                lucky_nums(size(lucky_nums)-i+1) = min_row
            end if
        end do
    end subroutine solve
end program main
          
          Lucky numbers: 0 0 0 0 0
program luckyNumbers
      implicit none
      integer, parameter :: m = 50, n = 50
      integer :: matrix(m, n)
      integer :: luckyNumbers(m)
      integer :: i, j, k
      ! Read the matrix from stdin
      do i = 1, m
          read(*,*) matrix(i, :)
      end do
      ! Find the lucky numbers
      k = 1
      do i = 1, m
          do j = 1, n
              if (matrix(i, j) == minval(matrix(i, :), dim=1) .and. &
                  matrix(i, j) == maxval(matrix(i, :), dim=1)) then
                  luckyNumbers(k) = matrix(i, j)
                  k = k + 1
              end if
          end do
      end do
      ! Print the lucky numbers
      do i = 1, k - 1
          write (*,*) luckyNumbers(i)
      end do
      end program luckyNumbers
           
          temp.f95:6:29:
    6 |       integer :: luckyNumbers(m)
      |                             1
Error: Symbol ‘luckynumbers’ at (1) cannot have a type
temp.f95:20:31:
   20 |                   luckyNumbers(k) = matrix(i, j)
      |                               1
Error: ‘luckynumbers’ at (1) is not a variable
temp.f95:28:35:
   28 |           write (*,*) luckyNumbers(i)
      |                                   1
Error: Symbol at (1) is not appropriate for an expression
          dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
def dfs(grid, x, y):
    n, m = len(grid), len(grid[0])
    grid[x][y] = 1
    for i in range(4):
        nx, ny = x + dx[i], y + dy[i]
        if 0 <= nx < n and 0 <= ny < m and grid[nx][ny] == 0:
            dfs(grid, nx, ny)
def closedIsland(grid):
    n, m = len(grid), len(grid[0])
    for i in range(n):
        for j in range(m):
            if i == 0 or i == n - 1 or j == 0 or j == m - 1:
                if grid[i][j] == 0:
                    dfs(grid, i, j)
    res = 0
    for i in range(1, n - 1):
        for j in range(1, m - 1):
            if grid[i][j] == 0:
                dfs(grid, i, j)
                res += 1
    return res
1. First, create a DFS function that traverses the grid and marks 0s as 1s if they are part of an island.
int dx[] = {-1, 1, 0, 0};
int dy[] = {0, 0, -1, 1};
void dfs(vector<vector<int>>& grid, int x, int y) {
    int n = grid.size(), m = grid[0].size();
    grid[x][y] = 1;
    for (int i = 0; i < 4; i++) {
        int nx = x + dx[i], ny = y + dy[i];
        if (nx >= 0 && nx < n && ny >= 0 && ny < m && grid[nx][ny] == 0) {
            dfs(grid, nx, ny);
        }
    }
}
int closedIsland(vector<vector<int>>& grid) {
    int n = grid.size(), m = grid[0].size();
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < m; j++) {
            if (i == 0 || i == n - 1 || j == 0 || j == m - 1) {
                if (grid[i][j] == 0) {
                    dfs(grid, i, j);
                }
            }
        }
    }
    int res = 0;
    for (int i = 1; i < n - 1; i++) {
        for (int j = 1; j < m - 1; j++) {
            if (grid[i][j] == 0) {
                dfs(grid, i, j);
                res++;
            }
        }
    }
    return res;
}
1. First, create a DFS function that traverses the grid and marks 0s as 1s if they are part of an island.