求马鞍点的问题

原题:“  若矩形Am*n中的某个元素Aij是第i行的最小值,同时又是第j列的最大值,则称此元素是该矩阵的一个马鞍点。假设以二维数组存储矩阵,试编写程序求出矩阵的所有马鞍点。”

做了一下,并与网上的代码对比了,似乎我的时间复杂度更低。

代码如下:

#if 0 //网上的方法



#include<iostream>

using namespace std;



void Find(int A[3][3],int m,int n)

{

    int min,i,j,k;

    bool flag;

  for(i=0;i<m;i++)

  {

      for(min=A[i][0],j=0;j<n;j++)

      {

       if(A[i][j]<min) 

       {

           min=A[i][j]; //求一行中的最小值

       } 

      }

    for(j=0;j<n;j++)

      {

       if(A[i][j]==min) //判断这些最小值是否马鞍点

       {

         for(flag=1,k=0;k<m;k++)

         {

          if(min<A[k][j]) 

              flag=0;

         }

         if(flag)

         {

           cout<<"寻找到的马鞍点为:"<<"A["<<i<<"]"<<"["<<j<<"]"<<" "<<A[i][j];

         }

       }

      }

  }

}

void main()

{

    int a[3][3]={{1,2,3},{9,6,7},{2,6,6}};

//    int a[3][3] = {{1, 2, 3}, {5, 6, 7}, {8, 9, 10}};

    cout<<"矩阵为:"<<endl;

    for(int i=0;i<3;i++)

    {

        for(int j=0;j<3;j++)

        {

            cout<<a[i][j]<<" ";

            if(j==2)

                cout<<endl;

        }

    }

    Find(a,3,3);

    cout<<endl;

}



#else //我的方法



#include <stdio.h>



void print(int a[][3], int m, int n)

{

    int i, j;



    for(i = 0; i < m; i++)

    {

        for(j = 0; j < n; j++)

        {

            printf("%d\t", a[i][j]);

        }

        printf("\n");

    }



}



void find( int a[][3],  int m, int n)

{

    int i, j, k;

    int flag, sum_flag;

    int tmp;





    sum_flag = 0;

    for(i = 0; i < m; i++)

    {

        flag = 0;

        

        tmp = 0;

        for(j = 0; j < n; j++)

        {

            if(a[i][j] < a[i][tmp])

            {

                tmp = j;  //找到第i行中最小值

            }

        }



        for(k = 0; k < m; k++)

        {

            if(a[k][tmp] > a[i][tmp])

            {

                flag++;

            }

        }



        if(0 == flag)

        {

            printf("find the vertex is a[%d][%d]: %d\n", i, tmp, a[i][tmp]);

            sum_flag++;

        }

    }



    if(0 == sum_flag)

    {

        printf("no vertex in this matrix.\n");

        

    }



}





int main()

{



    //int a[3][3] = {{1, 2, 3}, {5, 6, 7}, {8, 9, 10}};

    int a[3][3]={{1,2,3},{9,6,7},{2,6,6}};



    print(a, 3, 3);

    find(a, 3, 3);

    return 0;

}



#endif

    

 

你可能感兴趣的:(问题)