鞍点问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Authur520/article/details/83271439

题目内容:

给定一个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;
 } 

猜你喜欢

转载自blog.csdn.net/Authur520/article/details/83271439