输入格式:
输入的第1行是一个正整数n, (1<=n<=100),然后有n行,每一行有n个整数,同一行上两个整数之间有一个或多个空格。
输出格式:
对输入的矩阵,如果找到鞍点,就输出其下标。下标为两个数字,第一个数字是行号,第二个数字是列号,均从0开始计数。
如果找不到,就输出
NO
题目所给的数据保证了不会出现多个鞍点。
输入样例:
4
1 7 4 1
4 8 3 6
1 6 1 2
0 7 8 9
输出样例:
2 1
代码:
1 #include <stdio.h> 2 3 /* 4 1、 创建给定大小的矩阵 5 2、 读入输入的数,填充矩阵 6 3、 找出行中最大的数的下标(x,y) 7 4、 找出行最大数的那一列中最小数的 (x1,y) 8 5、 如果x1=x,那x,y就是我们要找的鞍点,如果不等于就检查下一行, 9 回到 3,直到所有行检查完。 10 11 */ 12 int main() 13 { 14 int size; 15 scanf("%d", &size); 16 int board[size][size]; 17 int i, j, t; 18 int x, y, x1; 19 int mark=0; 20 21 // 读入矩阵 22 for ( i=0; i<size; i++ ){ 23 for ( j=0; j<size; j++ ){ 24 scanf("%d", &board[i][j]); 25 } 26 } 27 28 29 for ( i=0; i<size; i++ ) { 30 for ( j=0, x=i, y=0; j<size; j++ ){ //行 31 if ( board[i][j] > board[x][y] ){ 32 x=i, y=j; 33 } 34 } 35 for ( x1=0, j=y, t=0; t<size; t++ ){ //列 36 if ( board[t][j] < board[x1][j] ){ 37 x1=t; 38 } 39 } 40 if ( x==x1 ){ //判断是否是鞍点 41 mark=1; 42 printf("%d %d", x, y); 43 break; 44 } 45 } 46 if ( mark==0 ){ 47 printf("NO"); 48 } 49 return 0; 50 }