问答题 请编写完整的程序。如果矩阵A中存在这样的一个元素A[i,j]满足条件:A[i,j]是第i行中值最小的元素,且又是第j列中值最大的元素,则称之为该矩阵的一个马鞍点。请编程计算出m*n的矩阵a的所有马鞍点。【上海大学2000三(20分)】【中科院自动化所1997】
【正确答案】正确答案:寻找马鞍点最直接的方法是在一行中找出一个最小值元素,然后检查该元素是否是其所在列的最大元素。如是,则输出一个马鞍点,时间复杂度是O(m*(m+n))。另一算法是使用两个辅助数组max和min,存放每列中最大值元素的行号和每行中最小值元素的列号,时间复杂度为O(m*n+m),但比较次数比前种算法会增加,也多使用向量空间。核心语句段如下: max[n]=(0); //max数组存放各列最大值元素的行号,初始化为行号0 min[m]={0); //min数组存放各行最小值元素的列号,初始化为列号0 for(i=0 ; icm;i++) //选各行最小值元素和各列最大值元素 for(j=0;jA[i][j])min[i]=j;}//修改第i行最小元素的列号 for(i=0;i
【答案解析】