有人能帮我看一下这道题吗? 不胜感激!

2014-02-14 13:45:13 +08:00
 yhf
Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.


#include <iostream>
using namespace std;

void setZero(int **mat, int m, int n) {
bool row[m], col[n];
memset(row, false, sizeof(row));
memset(col, false, sizeof(col));
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if (mat[i][j] == 0) {
row[i] = true;
col[j] = true;
}
for (int i = 0; i < m; ++i)
for (int j = 0; j < n; ++j)
if (row[i] || col[j])
mat[i][j] = 0;
}

int main(int argc, char const *argv[]) {
int **mat;
mat[3][4] = { 1, 2, 0, 4,
4, 0, 8, 10,
3, 8, 0, 12 };
setZero(mat, 3, 4);
for (int i = 0; i < 3; ++i) {
for (int j = 0; j < 4; ++j)
cout << mat[i][j] << ' ';
cout << endl;
}
return 0;
}

上面是我写的代码, 编译的时候显示 error: expected expression
mat[3][4] = { 1, 2, 0, 4,
^
1 error generated.

各位能帮我看一下吗? 小弟水平很烂, 还请大家轻拍.

怎么发帖以后缩进全没了.......
2521 次点击
所在节点    问与答
7 条回复
jedyu
2014-02-14 13:47:06 +08:00
定义过后,不能这么赋值
yhf
2014-02-14 13:49:19 +08:00
@jedyu 那应该怎么赋值呢? 麻烦讲详细一点好吗?
jedyu
2014-02-14 13:50:13 +08:00
int mat[3][4] = { 1, 2, 0, 4,
4, 0, 8, 10,
3, 8, 0, 12 };
yhf
2014-02-14 13:51:44 +08:00
@jedyu 可是改成这样赋值以后错误是这样的:
note: candidate function not viable: no known conversion from
'int [3][4]' to 'int **' for 1st argument
void setZero(int **mat, int m, int n) {
^
1 error generated.
jedyu
2014-02-14 14:21:03 +08:00
#include <iostream>
using namespace std;

void setZero(int mat[3][4], int m, int n)
{
if (NULL == mat || 0 ==m || n == 0)
{
return;
}

bool row[m], col[n];

for (int i = 0; i < m; i++)
{
for (int j = 0; j < n; j++)
{
if (mat[i][j] == 0)
{
row[i] = true;
col[j] = true;
}
}
}
for (int i = 0; i < m; ++i)
{
for (int j = 0; j < n; ++j)
{
if (row[i] || col[j])
{
mat[i][j] = 0;
}
}
}
}

int main(int argc, char const *argv[])
{
int mat[3][4] = { 1, 2, 0, 4,
4, 0, 8, 10,
3, 8, 0, 12 };
setZero(mat, 3, 4);
for (int i = 0; i < 3; ++i)
{
for (int j = 0; j < 4; ++j)
{
cout << mat[i][j] << ' ';
}

cout << endl;
}
return 0;
}
yhf
2014-02-14 14:44:12 +08:00
@jedyu 你这样编译是没有错误的, 但是原题的意思是不知道矩阵的大小的, 所以setZero()里面传递参数的时候不能直接把mat[3][4]传进去的吧....
jedyu
2014-02-14 14:57:09 +08:00
那你就转成char **, 然后 *(mat + i * j) = ....

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/100212

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX