鞍点问题(c++)

 

问题描述:若矩阵A中的某一元素A[i,j]是第I行中的最大值,而又是第j列中的最小值,则称A[i,j]为矩阵A中的一个鞍点。请写一个可确定此鞍点位置的算法(如果这个鞍点存在)。

基本要求:要求算法考虑某行中具有多个相同的且又是该行中最小的元素的情况。

实现提示:可以用一维数组R[0..n-1]保存每一行中的最小元素,用一维数组C[0..n-1]保存每一行中的最大元素。如果R[i]=C[j],则A[i,j]即为鞍点。

程序实现:可先求出每行的最小元素,放入一个数组min[m]中,再求出每一列的最大元素,放入max[n]中,若某个元素既在min[i]中,又在max[j]中,则该元素R[i][j]便是鞍点。

程序设计

#define m 3
#define n 3
#include "stdio.h"
void main()
{
    int i,j,a[m][n],min[n],max[m];int t=0;
    printf("按行输入元素,例:'5,'表示元素是5:\n");
    for(i=0;i<m;i++)
      for(j=0;j<n;j++)
       scanf("%d,",&a[i][j]);
    for(i=0;i<m;i++)
      for(j=0;j<n;j++)
        {
          max[i]=a[i][0];
          if(a[i][j]>max[i])
              max[i]=a[i][j];  
        }
    for(j=0;j<n;j++)
      for(i=0;i<m;i++)
       {
         min[j]=a[0][j];
         if(a[i][j]<min[j])
             min[j]=a[i][j];
        }   
            
     for(i=0;i<m;i++)
      for(j=0;j<n;j++)
        {  
         if(max[i]==min[j])
            {
            t++;
            printf("第%d行第%d列的%d是鞍点\n",i,j,max[i]);
            }
        }   
    if(t==0)
        printf("该矩阵不存在鞍点\n"); 
    printf("输出矩阵:\n");
     for(i=0;i<m;i++)
      {
       for(j=0;j<n;j++)
         printf("%d  ",a[i][j]);
       printf("\n");
      } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值