问答题 [说明]
若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m和n分别是矩阵A的行列数。
[程序]
void saddle (int A[ ] [ ], int m, int n)
{ int i,j,min;
for (i=0;i <m;i + + )
{ min:{{U}} (1) {{/U}};
for (j=1; j<n; j+ +)
if(A[i][j]<min){{U}} (2) {{/U}};
for (j=0; j<n; j+ +)
if ({{U}} (3) {{/U}})
{ p=0;
while (p<m&&{{U}} (4) {{/U}})p+ +;
if (p > = m)printf ("%d,%d,%d/n",i,j,min);
}
}
}[问题1] 将函数代码中的(1)~(4)处补充完整
[问题2]在上述代码的执行过程中,若A为矩阵[*],则调用saddle(A,3,3)后输出是{{U}} (5) {{/U}}。
【正确答案】
【答案解析】[问题1](1)A[i][0] (2)min=A[i][j] (3)A[i] [j]==min (4)A[p][j]<=min或min=A[P] [j] [问题2](5)1,2,11 [解析]本算法的基本思想是:对矩阵A逐行处理,求出每一行的最小值,对于这一行上等于最小值的那些元素,逐个判断该元素是否是所在列的最大元,如果是则打印输出。 (1)由上下文可知min代表第i行的最小值,此处应对其赋初值:本行第一个元素; (2)遍历第i行后面的元素,若有元素比miu小,则应更新min的值; (3)此处应挑出本行中取最小值的元素进行判断; (4)此循环用于判断min是否是本列的最大元。 (5)所给矩阵中只有一个鞍点11,若行列号从。开始计,它位于第l行第2列。