求一個矩陣中的馬鞍點(c語言實現)
阿新 • • 發佈:2018-12-21
資料結構中的求一個矩陣的馬鞍點
請編寫一個完整的程式,如果矩陣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; }