寻找矩阵中的“鞍点”

    题目要求
    在一个矩阵中,有这样的元素:它在该行中最大,而在该列中最小。我们把这样的元素称为“鞍点”。一个矩阵可能没有鞍点,要存在鞍点也只能有一个。任意输入一个5*5的矩阵,寻找该矩阵中的鞍点,并将它在矩阵中的位置输出。

    算法描述:

    对于一个m*n的矩阵
    Repeat:
       找出第i行中最大的元素A[i][t];
       If(本行中有与元素A[i][t]的值相等的元素)
              Then本行中没有鞍点,执行i<--i+1,并跳出本次Repeat循环;
       Else将元素A[i][t]与第t列的每个元素进行比较,
            If(存在小于或等于A[i][t]的元素)
                  Then说明A[i][t]不是鞍点,执行i<--i+1,并跳出本次Repeat循环;
            Else元素A[i][t]是鞍点,返回该元素在矩阵中的位置(i,t),程序结束
    Until i>=m;
    返回0,该矩阵中无鞍点。

    程序实现:

    #include"stdio.h"
    #include"conio.h"
    int getsaddlepoint(int *x,int *y,int (*A)[5],int m,int n)
    {
            int max,i,j,k,flag;
            for(i=0;i<m;i++)
            {
                  max=0;               //记录第i行中最大值的列数
                  flag=1;
                  for(j=1;j<n;j++)     //找出第i行中的最大元素的位置A[i][max] 
                  {
                       if(A[i][j]>A[i][max])
                               max=j;
                  }
                  for(k=0;k<n;k++)
                       if(A[i][max]==A[i][k]&&max!=k)
                           {
                                  flag=0;
                                  break;
                           }
                  if(flag==1)
                  for(k=0;k<m;k++)    //判断是否为列最小
                 {
                        if(A[k][max]<=A[i][max]&&k!=i)  //不是最小
                        {
                             flag=0;
                             break;
                        }
                 }
                 if(flag==1)   //找到鞍点,用x,y返回,程序结束
                 {
                        *x=i;
                        *y=max;
                        return 1;
                 }
            }
            return 0;
    }
    
    main()
    {
         int A[5][5],i,j,k,x,y;
         printf("Please input some digit into the matrix\n");
         for(i=0;i<5;i++)
             for(j=0;j<5;j++)
                 scanf("%d ",&A[i][j]);
                 if(getsaddlepoint(&x,&y,A,5,5))
                      printf("\nsaddlepoint is at (%d,%d)",x+1,y+1);
                 else
                       printf("\nThere is no saddlepoint in the matrix\n");
                       getche();
    }
    • 1
      点赞
    • 6
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值