函数题矩阵置零 分数 10 作者 龚雄兴 单位 湖北文理学院 对于M行N的整数矩阵A,如果矩阵的某元素为零,请将它所在的行和所在的元素全部设置为零(注意:原来的零进行两个方向的传递,但新设置的零不进行二次传递)。请编写函数完成本功能(直接在原矩阵上修改),能否将空间复杂度控制在O(1)以内,即使用尽量少的辅助空间完成任务。 输入样例: 首行两个整数,表示矩阵的行,列数,余下有多行,每行有若干以空格分隔的整数。 4 5 1 2 3 0 5 2 3 4 5 6 3 4 5 6 7 0 5 6 7 8 输出样例: 输出原矩阵中有零的行和列均置成零以后的矩阵(由测试程序完成)。 0 0 0 0 0 0 3 4 0 6 0 4 5 0 7 0 0 0 0 0 函数接口定义: void fun0 (int **A,int M,int N);//原矩阵中有零的行和列均置成零 其中 M 和 N 是矩阵的行,列数,矩阵可看成是由多个一维数组构成(数组构成的数组),故A是一个二维指针。

时间: 2024-03-19 07:46:23 浏览: 15
这道题可以使用两个一维数组来记录哪些行和哪些列需要置0,然后再遍历一遍矩阵,将对应的行和列置0即可。 具体实现如下: ``` void fun0(int **A, int M, int N) { bool *row = new bool[M]; // 用于记录哪些行需要置0 bool *col = new bool[N]; // 用于记录哪些列需要置0 memset(row, false, sizeof(bool) * M); // 初始化为false memset(col, false, sizeof(bool) * N); // 初始化为false // 遍历矩阵,记录哪些行和哪些列需要置0 for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { if (A[i][j] == 0) { row[i] = true; col[j] = true; } } } // 将对应的行和列置0 for (int i = 0; i < M; i++) { for (int j = 0; j < N; j++) { if (row[i] || col[j]) { A[i][j] = 0; } } } delete[] row; delete[] col; } ``` 由于只使用了两个一维数组来记录哪些行和哪些列需要置0,因此空间复杂度为O(M+N),满足题目要求。

相关推荐

6-3 有结构文件的读写1 分数 20 作者 龚雄兴 单位 湖北文理学院 学生类型:ST的类型定义如下: typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; 编写函数,从指定的文件上读入若干字符串,每行字符串是一个学生的信息(姓名,学号,性别,年龄,分数)的字符串表示,数据间以空格分隔,将学生们的信息存储于一个结构体中,并利用output()函数输出到指定文件中。 函数接口定义: void fun(FILE *fin,FILE *fout); 其中 fin 和 fout 都是用户传入的参数。 前者是已正常打开的可读文件,而后者是已正常打开的可写文件。 裁判测试程序样例: 在这里给出函数被调用进行测试的例子。例如: #include <stdio.h> #include <stdlib.h> typedef struct student{ char name[10],id[10]; int gender; int age; double scored; } ST; void output(ST *d,FILE *fout){//测试程序,输出到文件调用此函数完成 if(d==NULL) {printf("null\n");return;} fprintf(fout,"%s,%s,%d,%d,%4.2f\n",d->name,d->id,d->gender,d->age,d->scored); } void fun(FILE *fin,FILE *fout);//<--需要完成的函数(包括读入字符串,转换成对应的结构体,并利用函数(output())输出到指定文件中,输入输出文件不用考虑 /* 请在这里填写答案 */ 输入样例: 从固定文件中读取:文件内容: aaa 123 0 18 88.88 bbb 456 1 19 99.99 ccc 789 1 18 66.66 ddd 356 0 18 67.89 输出样例: 输出到指定文件中,文件内容: aaa,123,0,18,88.88 bbb,456,1,19,99.99 ccc,789,1,18,66.66 ddd,356,0,18,67.89 代码长度限制 16 KB 时间限制 400 ms 内存限制 64 MB

最新推荐

recommend-type

6-10.py

6-10
recommend-type

基于机器学习的入侵检测系统+源码+说明.zip

基于机器学习的入侵检测系统+源码+说明.zip
recommend-type

matlab基于潜在低秩表示的红外与可见光图像融合.zip

matlab基于潜在低秩表示的红外与可见光图像融合.zip
recommend-type

4-5.py

4-5
recommend-type

基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip

基于tensorflow使用简单线性回归实现波士顿房价预测源码.zip
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

2. 通过python绘制y=e-xsin(2πx)图像

可以使用matplotlib库来绘制这个函数的图像。以下是一段示例代码: ```python import numpy as np import matplotlib.pyplot as plt def func(x): return np.exp(-x) * np.sin(2 * np.pi * x) x = np.linspace(0, 5, 500) y = func(x) plt.plot(x, y) plt.xlabel('x') plt.ylabel('y') plt.title('y = e^{-x} sin(2πx)') plt.show() ``` 运行这段
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。