求一個矩陣中的馬鞍點(c語言實現)

數據結構中的求一個矩陣的馬鞍點
請編寫一個完整的程序,如果矩陣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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章