c语言:这题怎么做? 描述 给定的一个N行N列的二维非负整数矩阵(N<=10),任两个非0元素值

c语言:这题怎么做?
描述
给定的一个N行N列的二维非负整数矩阵(N<=10),任两个非0元素值不相同,对其反复进行如下操作,问,至少需要进行几次操作,使得矩阵所有元素全为0
操作如下:
“选择当前矩阵中值最大的元素,将该元素以及同行或同列上的元素全部设为0”

输入格式
第一行为一个正整数N,此后N行,每行N个非负整数。N*N个数中任两个非0元素值不相同
输出格式
至少操作的次数
输入样例
3
1 2 3
4 5 6
7 8 9
输出样例
3

#include<stdio.h>
#include<stdlib.h>
int main()
{
int n, i, j, time = 0;
scanf("%d", &n);
int a[10][10] = { 0 };
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
scanf("%d", &a[i][j]);
int max = -1, maxrow = 0, maxcol = 0;
int flag = 1;
while (flag == 1)
{
max = -1;
flag = 0;
for (i = 0; i < n; ++i)
for (j = 0; j < n; ++j)
if (a[i][j]>max)
{
max = a[i][j];
maxrow = i;
maxcol = j;
}
for (i = 0; i < n; ++i)
a[maxrow][i] = 0;
for (i = 0; i < n; ++i)
a[i][maxcol] = 0;
++time;
for (i = 0; i < n; ++i)
{
for (j = 0; j < n; ++j)
if (a[i][j] != 0)
{
flag = 1;
break;
}
if (flag == 1)break;
}
}
printf("%d", time);
system("pause");
return 0;
}

初步是这样的,还可以时间上优化一点。不过要求不严格的话这样就行。

追问

谢谢。

温馨提示:答案为网友推荐,仅供参考
相似回答