帮忙用数据结构做下此程序,假设以二维数组存储矩阵,试编写算法求出矩阵中的所有马鞍点。谢谢。。。

若矩阵Am*n中的某个元素aij是第i行中的最小值,同时又是第j列中的最大值,则称次元素为该矩阵中的一个马鞍点。。(m,n,i,j都是下标)

public class P1{
private int[][] a=null;
private int rownum=0,colnum=0;
//存储每行中最小的那个数的行和列,如"1,2"---第一行,第二列
private int[] rows=null;
//存储每列中最大的那个数的行和列,如"1,2"---第一行,第二列
private int[] cols=null;
private int num=0;
P1(int[][] a,int row,int col){
this.a = a;
this.rownum=row;
this.colnum=col;
rows = new int[row];
cols = new int[col];
}

public void setMinRow(){
int min;
int minIndex;
for(int r=0;r<rownum;r++){
min = a[r][0];
minIndex=0;
for(int c=0;c<colnum;c++){
if(a[r][c]<min){
min = a[r][c];
minIndex=c;
}
}
rows[r]=minIndex;

}
}

public void setMaxCol(){
int max;
int maxIndex;
for(int c=0;c<colnum;c++){
max = a[0][c];
maxIndex=0;
for(int r=0;r<rownum;r++){
if(a[r][c]>max){
max = a[r][c];
maxIndex=r;
}
}
cols[c]=maxIndex;
}
}

public void getSaddleNUm(){
setMinRow();
setMaxCol();
for(int r=0;r<rownum;r++){
if(r==cols[rows[r]]){
num++;
System.out.println("第"+num+"个马鞍点是行"+r+"列"+rows[r]+":"+a[r][rows[r]]);
}
}
}

public void print(){
for(int r=0;r<rownum;r++){
for(int c=0;c<colnum;c++){
System.out.print(a[r][c]+" ");
}
System.out.println("");
System.out.println("-----------");
}
}

public static void main(String[] args){
//存放矩阵的数值
int[][] a1 = {{1,5,9,10,2},{7,5,6,3,2},{11,7,9,0,12},{6,9,13,10,21},{11,4,13,40,32},{21,16,91,100,42}};
//第一个参数为存放矩阵的数组,第二个参数为矩阵行数,第三个为矩阵列数
P1 p = new P1(a1,6,5);
p.getSaddleNUm();
p.print();
System.out.println("矩阵拥有的马鞍点数为:"+p.num);
}
}
温馨提示:答案为网友推荐,仅供参考