问答题
[说明]
若矩阵A
m×n中存在某个元素a
ij满足:a
ij…是第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:
(1) ;
for (j=1; j<n; j+ +)
if(A[i][j]<min)
(2) ;
for (j=0; j<n; j+ +)
if (
(3) )
p=0;
while (p<m&&
(4) )p+ +;
if (p > = m)printf ("%d,%d,%d/n",i,j,min);
[问题1] 将函数代码中的(1)~(4)处补充完整
[问题2]在上述代码的执行过程中,若A为矩阵
【正确答案】[问题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列。