數據結構中的求一個矩陣的馬鞍點
請編寫一個完整的程序,如果矩陣A中存在這樣的一個元素A[i,j]滿足條件A[i,j]是第i行的值最小的元素,且又是第j列中最大的元素,則稱之爲該矩陣的一個馬鞍點。
代碼如下:
#include<stdio.h>
#define m 3
#define n 3
/*求矩陣A中的馬鞍點*/
void Get_Saddle(int A[m][n])
{
/*
基本思想:1.首先它是一個二維數組,需要遍歷每一行,需要一個for循環,且需要放在最外層
2.然後,依次從每一行中橫向遍歷到最後(直到本行結束),找到最小值
1)又需要一層循環,循環結束至這一行中的最後位置,
2)找的最小值,記錄最小值所在列數
3.找到最小值之後,用一個變量minCol記下當前列數
4.順這當前列數豎向遍歷(從當前列第一行開始向下)判斷是否是最大的,如果是,則這個元素就是整個矩陣的馬鞍點
1)又需要一個循環,用來遍歷豎向遍歷
*/
int i,j,k;
int flag,min,minCol;
for(i=0;i<m;i++)
{
//求一行中的最小值
min = A[i][0];//先假設每行中第一個元素爲最小值
minCol = 0;
for(j=0;j<n;j++)//每行元素向後遍歷
{
if(A[i][j] < min)//如果遇到比第一個元素小的
{
min = A[i][j];//使最小值爲當前行當前列
minCol =j;//標記出當前列數
}
}
/*判斷這個最小值是否是馬鞍點,即是不是所在列的最大值*/
flag = 1;
for(k=0;k<m;k++)
{
if(min < A[k][minCol])//如果當前行的最小值小於所在列中的值,即這個數不是馬鞍點
{
flag = 0;//標記變量置零
break;//因爲已經找到了這個點不是馬鞍點,所以無需再去比較,直接返回
}
}
if(flag)//如果成立,則表示找到了馬鞍點,輸出
{
printf("Found a saddle element !\nA[%d][%d] = %d\n",i+1,minCol+1,A[i][minCol]);
}
}
}
int main(void)
{
/*初始化A[m][n]*/
int A[m][n] = {1,2,3,
4,5,6,
7,8,9};
for(int i=0;i<m;i++)
{
for(int j = 0;j<n;j++)
printf("%d ",A[i][j]);
printf("\n");
}
Get_Saddle(A);
getchar();
return 0;
}