找出矩阵的鞍点

输入格式:

输入的第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

代码:

 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 } 

 

posted @ 2017-04-13 21:38  TingShuo  阅读(4843)  评论(0编辑  收藏  举报