阅读下列函数说明和C函数,回答问题1~2,将解答填入栏内。 [说明] 若矩阵Am×n中存在某个元素aij满足:aij…是第i行中最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。下面程序的功能是输出A中所有鞍点,其中参数A使用二维数组表示,m

admin2009-02-15  34

问题 阅读下列函数说明和C函数,回答问题1~2,将解答填入栏内。
[说明]
   若矩阵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: (1);
       for (j=1; j<n; j+ +)
          if(A[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为矩阵,则调用saddle(A,3,3)后输出是(5)。

选项

答案[问题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列。
转载请注明原文地址:https://jikaoti.com/ti/irW7FFFM
0

最新回复(0)