1489 数据结构:矩阵鞍点
即使AC,但此算法仍有不足之处,不能正确处理行最小、列最大+相等的矩阵情况。
如2 2
2 3
应为A[1][1]、A[2][1]
1 #include <iostream>
2 #define MAX_SIZE 100+1
3 using namespace std;
4 int array[MAX_SIZE][MAX_SIZE];
5 void creatMatrix()
6 {
7 int m,n,iMax,jMax,count=0;//当前列中最大元素的行下标、列下标
8 scanf("%d%d",&m,&n);
9 int minRow[m],maxCol[n];
10 for (int i = 1; i <= m; ++i)
11 {
12 scanf("%d",&array[i][1]);
13 minRow[i]=array[i][1];
14 for (int j = 2; j <= n; ++j)
15 {
16 scanf("%d",&array[i][j]);
17 if(array[i][j]<minRow[i]) minRow[i]=array[i][j];
18 }
19 }
20 for (int j = 1; j <= n; ++j)//遍历每一列
21 {
22 maxCol[j]=array[1][j]; iMax=1,jMax=j;
23 for (int i = 1; i <= m; ++i)
24 if(maxCol[j]<array[i][j])
25 {
26 maxCol[i]=array[i][j];
27 iMax=i; jMax=j;
28 }
29 if(array[iMax][jMax]==minRow[iMax])
30 {
31 count==0 ? printf("A[%d][%d]",iMax,jMax ):printf(" A[%d][%d]",iMax,jMax );
32 count++;
33 }
34 }
35 if(count==0) printf("NO.");
36 printf("\n");
37 }
38 int main(int argc, char const *argv[])
39 {
40 #ifndef _OJ_ //ONLINE_JUDGE
41 freopen("input.txt", "r", stdin);
42 #endif
43 int num;
44 scanf("%d",&num);
45 while(num--)
46 {
47 creatMatrix();
48 if(num>0) printf("\n");
49 }
50 return 0;
51 }