1. 程式人生 > >鞍點問題

鞍點問題

題目內容:

給定一個n*n矩陣A。矩陣A的鞍點是一個位置(i,j),在該位置上的元素是第i行上的最大數,第j列上的最小數。一個矩陣A也可能沒有鞍點。

你的任務是找出A的鞍點。

 

 

 

輸入格式:

輸入的第1行是一個正整數n, (1<=n<=100),然後有n行,每一行有n個整數,同一行上兩個整數之間有一個或多個空格。

 

輸出格式:

對輸入的矩陣,如果找到鞍點,就輸出其下標。下標為兩個數字,第一個數字是行號,第二個數字是列號,均從0開始計數。

如果找不到,就輸出

NO

題目所給的資料保證了不會出現多個鞍點。

 

輸入樣例:

1 7 4 1 

4 8 3 6 

1 6 1 2 

0 7 8 9

 

輸出樣例:

2 1

 

#include<stdio.h>

int main()
{
	int n;
	scanf("%d",&n);
	int a[n][n];
	for( int i=0; i<n; i++ ){
		for( int j=0; j<n; j++ ){
			scanf("%d",&a[i][j]);
		}
	}
	int max[n];
	int min[n];
	for( int row=0; row<n; row++ ){  //求每一行上的最大值 
		max[row] = a[row][0];
		for( int col=1; col<n; col++ ){
			if( a[row][col] > max[row] ){
				max[row] = a[row][col];
			}
		}
	}
	for( int col=0; col<n; col++ ){  //求每一列上的最小值 
		min[col] = a[0][col];
		for( int row=1; row<n; row++ ){
			if( a[row][col] < min[col] ){
				min[col] = a[row][col];
			}
		}
	}
	int ans = 0;
	for( int row=0; row<n; row++ ){ 
		for( int col=0; col<n; col++ ){
			if( max[row] == min[col] ){
				printf("%d %d\n",row,col);
				ans = 1;
			}
		}
	}
	if( !ans ){
		printf("NO\n");
	}
	return 0;
 }