描述:
矩阵的鞍点是指一个N(N<=30)阶方阵的某元素,该元素为所在行的最大,并为所在列的最小,请你设计程序找出所给方阵的所有鞍点。
输入:
标准输入,第1行需要你计算用例的个数n,接下来n个测试用例的输入,每个用例的第一行为方阵的阶数N,接下来的N行,每行有N个正整数。
输出:
标准输出,输出你找到的鞍点的元素的位置(行数,列数),如果有多个鞍点,以先行后列的次序输出,鞍点之间使用一个“;”隔开;如果没有,输出”NO;”。每个测试用例使用一行输出。
测试用例输入:
2
2
1 3
3 4
3
1 2 3
4 4 4
2 2 3
测试用例输出
1,2;
1,3;3,3;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
class Main {
//定义一个较大值,进行初始化的作用
static int N= (int) 1e9;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int t=sc.nextInt();
while(t-->0){
int n=sc.nextInt();
int[][] a=new int[n+1][n+1];
//flag判断是否有值会符合条件
boolean flag=true;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]= sc.nextInt();
}
}
//a[i][0]和a[0][i]存储该数组,行最小值与列最大值,即比对值
//对其进行初始化
for(int i=1;i<=n;i++){
a[i][0]=-N;
a[0][i]=N;
}
//寻找符合条件的值
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][0]=Math.max(a[i][0],a[i][j]);
a[0][i]=Math.min(a[0][i],a[j][i]);
}
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
//若该值符合题意,则输出
if(a[i][j]==a[i][0]&&a[i][j]==a[0][j]){
flag=false;
System.out.print(i+","+j+";");
}
}
}
if(flag)System.out.print("NO;");
System.out.println();
}
}
}