题目:
描述:
矩阵的鞍点是指一个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.Scanner;
public class Xingyuxingxi {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a= sc.nextInt();
int d=0,x=0,y=0;
while(a--!=0)
{
int b= sc.nextInt();
int [][]c=new int[b][b];
for(int i=0;i<b;i++)
{
for(int j=0;j<b;j++)
{
c[i][j]=sc.nextInt();
}
}
y=0;
for(int i=0;i<b;i++)
{
for(int j=0;j<b;j++)
{
d=c[i][j];
int min,max;
x=0;
min=max=d;//赋初值
for(int k=0;k<b;k++)
{
if(c[i][k]>=max)//找行最大
{
max=c[i][k];
}
}
if(max==d)//如果最大数为当前数则x++
{
x++;
}
for(int k=0;k<b;k++)
{
if(c[k][j]<=min)//找列最小
{
min=c[k][j];
}
}
if(min==d)//如果最小值为当前数则x++
{
x++;
}
if(x==2)//如果同时满足则x为2,应该输出
{
System.out.print((i+1)+","+(j+1)+";");//输出鞍点
y++;
}
}
}
if(y==0)
{
System.out.print("NO;");
}
System.out.println();
}
}
}