c - 如何将二维矩阵作为参数传递给函数?

标签 c

a problem on leetcode对于 C 语言,我们必须实现一个定义为的函数

int numIslands(char** grid, int gridRowSize, int *gridColSizes);

无法更改此函数的定义。

我已将其实现为

#define VISITED 'v'

void dfs(char** grid, int gridRowSize,
         int gridColSizes, int i, int j) {
    grid[i][j] = VISITED; <- throws


    if (i - 1 >= 0 && grid[i - 1][j] == '1') <- throws
        dfs(grid, gridRowSize, gridColSizes, i - 1, j);

    if (i + 1 < gridRowSize && grid[i + 1][j] == '1')
        dfs(grid, gridRowSize, gridColSizes, i + 1, j);

    if (j - 1 >= 0 && grid[i][j - 1] == '1')
        dfs(grid, gridRowSize, gridColSizes, i, j - 1);

    if (j + 1 < gridColSizes && grid[i][j + 1] == '1')
        dfs(grid, gridRowSize, gridColSizes, i, j + 1);
}

int numIslands(char **grid, int gridRowSize, int *gridColSizes) {
    int count = 0;

    for (int i = 0; i < gridRowSize; i++) {
        for (int j = 0; j < *gridColSizes; j++) {
            if (grid[i][j] == '1') {
                count++;
                dfs(grid, gridRowSize, *gridColSizes, i, j);
            }
        }
    }

    return count;
}

int main() {
    char **grid = {
            {'1','1','1','1','0'},
            {'1','1','0','1','0'},
            {'1','1','0','0','0'},
            {'0','0','0','0','0'}
    };
    int cols = 5;

    int res = numIslands(grid, 4, &cols);
}

它可以编译,但会抛出对网格进行索引访问的行(如代码中提到的行)。

最佳答案

你可能会这样做:

char line1[] = {'1', '1', '1', '1', '0'};
char line2[] = {'1', '1', '0', '1', '0'};
char line3[] = {'1', '1', '0', '0', '0'};
char line4[] = {'0', '0', '0', '0', '0'};
int sizes[] = {
    sizeof(line1) / sizeof(*line1),
    sizeof(line2) / sizeof(*line2),
    sizeof(line3) / sizeof(*line3),
    sizeof(line4) / sizeof(*line4)
};
char* grid[] = {line1, line2, line3, line4};
int gridRowSize = sizeof(grid) / sizeof(*grid);

int res = numIslands(grid, gridRowSize, lines);

关于c - 如何将二维矩阵作为参数传递给函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55657430/

相关文章:

交叉编译宏名称

c - 指定编译器可以使用的函数的 simd 级别

c++ - 内存对齐和长拷贝

c - 以编程方式并行化 C 程序的一部分

c - 使用数组来统计选票

c - 解析 C 头文件以确定所有定义的宏

c - 尝试在 C 函数中复制字符串时出现段错误

c - 使用 GCC 结构位打包的字节顺序

c - C中的Gabor滤波器卷积矩阵

C - printf ("\a") 不会发出警报