包含 0 的行列进行矩阵置零
题目介绍
本题目要求实现一个算法,用于将矩阵中所有值为0的元素所在的行和列都置为0。这是一个常见的问题,通常出现在面试和算法竞赛中,考察对矩阵操作和空间复杂度的理解。
题目要求
- 实现
setZeroes函数,该函数接收一个矩阵的指针、矩阵的大小以及每行的列数数组,将矩阵中值为0的元素所在的行和列都置为0。
输入
- 矩阵的大小
matrixSize。 - 每行的列数数组
matrixColSize。 - 矩阵的值,以一维数组的形式提供。
输出
- 修改后的矩阵,其中所有值为0的元素所在的行和列都被置为0。
示例
假设输入矩阵为:
1 0 3
4 5 0
7 8 9
执行 setZeroes 函数后,输出矩阵应为:
1 0 0
0 5 0
7 0 9
代码介绍
-
main.c 文件包含主函数,用于处理命令行输入,分配矩阵内存,调用
setZeroes函数,并打印原始和修改后的矩阵。 -
matrix_zero.c 文件包含
setZeroes函数的框架,以及辅助函数printMatrix和freeMatrix。
详细提示信息
-
setZeroes 函数实现:
- 使用额外的数组
row和col来记录哪些行和列需要被置0。 - 遍历矩阵,标记
row和col中相应的元素。 - 根据
row和col的标记,将矩阵中相应的行和列置0。
- 使用额外的数组
-
main 函数解析:
- 检查命令行参数数量是否正确。
- 分配内存给
matrixColSize和matrix。 - 解析命令行参数,填充矩阵值。
- 调用
setZeroes函数。 - 打印原始和修改后的矩阵。
- 释放分配的内存。
-
printMatrix 函数:
- 打印矩阵的当前状态。
-
freeMatrix 函数:
- 释放矩阵占用的内存。
注意事项
- 确保
setZeroes函数在修改矩阵前正确记录了需要置0的行和列。 - 注意内存分配和释放,避免内存泄漏。
- 考虑空间复杂度,尽量减少额外空间的使用。
- 参与者需要根据题目要求,完成
setZeroes函数的实现,确保能够正确地将矩阵中为0的元素所在的行和列都置为0。同时,注意代码的健壮性和内存管理。通过命令行参数和打印结果,展示算法的实际效果。