Java 如何在整数矩阵中找到鞍点

Java 如何在整数矩阵中找到鞍点,java,methods,point,saddle,Java,Methods,Point,Saddle,这是我寻找矩阵鞍点(IntMatrix)的程序。请帮助我为INTM矩阵制作另一种方法,用于鞍点方法中的参数 public class SaddlePoint{ public void saddlePoints(IntMatrix m, int[] rows, int[] cols) { int rows = m.length; int cols = m[0].length; boolean[][] flagArr = new boolea

这是我寻找矩阵鞍点(IntMatrix)的程序。请帮助我为INTM矩阵制作另一种方法,用于鞍点方法中的参数

public class SaddlePoint{
    public void saddlePoints(IntMatrix m, int[] rows, int[] cols) {
        int rows = m.length;
        int cols = m[0].length;

        boolean[][] flagArr = new boolean[rows][cols];

        for(int i=0; i<rows; i++){
            for(int j=0; j<cols; j++){
                if(m[i][j]==0){
                    flagArr[i][j]=true;
                }
            }
        } 

        for(int i=0; i<rows; i++){
            for(int j=0; j<cols; j++){
                if(flagArr[i][j]==true){
                    /*for rows*/
                    for(int k=0; k<rows; k++){
                        m[k][j]=0;
                    }
                    /*for cols*/
                    for(int z=0; z<cols; z++){
                        m[i][z]=0;
                    }
                }
            }
        }
    }
}
这是我的程序,我只需要鞍点

IntMatrix Class:
 //represents a 2-dimensional matrix of integers
    Constructor Signature:
        IntMatrix(int rows, int cols, int ... elements)
        //elements are provided in row major order

IntMatrixUtilityClass
    Static Methods:
        IntMatrix sum(IntMatrix ... matrices)
        //returns the sum of its arguments

        IntMatrix product(IntMatrix m1, IntMatrix m2, IntMatrix ... others)
        //returns the product of its arguments

        boolean[] saddlePoints(IntMatrix m, int[] rows, int[] cols)
        /*for each of the row and column pairs, returns true if the specified element of m is a saddle
        point for the matrix; returns false otherwise*/
public class IntMatrix {
  private int[][] matrix;
  private int rows;
  private int cols;
  private int[] elements;

public IntMatrix(int r, int c, int... e) {
    this.rows = r;
    this.cols = c;
    this.elements = e;

    matrix = new int[rows][cols];
    int l = 0;
    for (int i = 0; i < matrix.length; i++) {
        for (int j = 0; j < matrix[0].length; j++) {
            this.matrix[i][j] = elements[l];
            l++;
        }
    }
}

public static IntMatrix sum(IntMatrix... matrices) {
    int[] result = new int[matrices[0].rows * matrices[0].cols];
    for (IntMatrix matrix : matrices) {
        int l = 0;
        for (int i = 0; i < matrix.rows; i++) {
            for (int j = 0; j < matrix.cols; j++) {
                result[l] += matrix.matrix[i][j];
                l++;
            }
        }
    }

    IntMatrix m3 = new IntMatrix(matrices[0].rows, matrices[0].cols, result);

    return m3;
}

public static IntMatrix product(IntMatrix m1, IntMatrix m2,
        IntMatrix... others) {

    int[] result = new int[m1.rows * m2.cols];
    int l = 0;
    for (int i = 0; i < m1.rows; i++) {
        for (int j = 0; j < m2.cols; j++) {
            for (int k = 0; k < m1.cols; k++) {
                result[l] += (m1.matrix[i][k] * m2.matrix[k][j]);
            }
            l++;
        }
    }
    IntMatrix m3 = new IntMatrix(m1.rows, m2.cols, result);

    for (IntMatrix other : others) {
        int length = others.length;
        l = 0;
        int[] result2 = new int[(m3.rows * others[length - 1].cols)];
        for (int i = 0; i < m3.rows; i++) {
            for (int j = 0; j < other.cols; j++) {
                for (int k = 0; k < m3.cols; k++) {
                    result2[l] += (m3.matrix[i][k] * other.matrix[k][j]);
                }
                l++;
            }
        }
        m3 = new IntMatrix(m3.rows, others[length - 1].cols, result2);
    }

    return m3;
}

public String toString() {
    return String.valueOf(rows) + " " + " " + String.valueOf(cols)
            + Arrays.toString(elements);
}

}// end of Matrix Class 
公共类IntMatrix{
私有int[][]矩阵;
私有int行;
私人公司;
私有int[]元素;
公共整数矩阵(整数r,整数c,整数…e){
这个行=r;
this.cols=c;
这个元素=e;
矩阵=新整数[行][列];
int l=0;
对于(int i=0;i
首先我想说的是,请在询问之前自己做一些研究。从这里你可以找到被接受的ans,但我告诉你这不是根据

萨德尔点: 或者简单地说,如果某个条目A[x][y]是第x行中的最小值和第y列中的最大值,则矩阵被称为具有鞍点。一个矩阵可以有多个鞍点

此代码符合维基百科的定义

package com.mubasher.main;

import java.util.Random;

public class SaddlePoint {

private int[][] intMatrix;
private int[] colMaxima;
private int[] rowMinima;
public SaddlePoint(int col, int row){
    intMatrix = new int[row][col];
    colMaxima = new int[col];
    rowMinima = new int[row];
    fillMatrix();
}
private void fillMatrix() {
    Random random = new Random();
    for(int row = 0; row<intMatrix.length;row++){
        for(int col = 0;col<intMatrix[0].length;col++){
            intMatrix[row][col] = random.nextInt(21) - 10;
        }
    }
    printMatrix();
}
private void printMatrix(int[][] intMatrix) {
    for(int row = 0;row<intMatrix.length;row++){
        for(int col = 0; col<intMatrix[0].length;col++){
            System.out.print(intMatrix[row][col]+"   ");
        }
        System.out.println("");         
    }
    for(int i=0;i<intMatrix[0].length;i++)
    System.out.print("----");
    System.out.println("");
}
public void printMatrix() {
    printMatrix(intMatrix);
}
public void printArray(int[] array,boolean isHorizontaly) {
    for(int i = 0;i<array.length;i++){
        if(isHorizontaly){
            System.out.print(array[i]+"   ");
        } else {
            System.out.println(array[i]);
        }
    }

    if(isHorizontaly){System.out.println("");
    for(int i=0;i<array.length;i++)
        System.out.print("----");
    } else {
        System.out.println("----");
    }
    System.out.println("");
}

public void run(){
    int maxVal = 0,minVal=0;
    //minimum in each row
    for(int row = 0; row<intMatrix.length;row++){
        for(int col = 0;col<intMatrix[0].length;col++){
            if(col == 0 ) {
                rowMinima[row]=intMatrix[row][col]; // assume first val at (row,0) is minimum 
            } else {
                if(intMatrix[row][col]<rowMinima[row]){
                    rowMinima[row]=intMatrix[row][col]; // assign new minimum val
                }
            }
        }
    }
    //maximum in each column
    for(int col = 0; col<intMatrix[0].length;col++){
        for(int row = 0;row<intMatrix.length;row++){
            if(row == 0 ) {
                colMaxima[col]=intMatrix[row][col]; // for 
            } else {
                if(intMatrix[row][col]>colMaxima[col]){
                    colMaxima[col]=intMatrix[row][col]; // assign new max val
                }
            }
        }
    }
    printArray(colMaxima,true);
    printArray(rowMinima,false);
    int colIndx=0,rowIndx=0;
    for(int i =0;i<colMaxima.length;i++){
        if(i == 0 ) {
            minVal= colMaxima[i];
            colIndx=i;
        } else {
            if(colMaxima[i]<minVal){                    
                minVal= colMaxima[i];
                colIndx=i;
            } 
        }

    }
    for(int i =0;i<rowMinima.length;i++){
        if(i == 0 ) {
            maxVal= rowMinima[i];
            rowIndx = i;
        } else {
            if(rowMinima[i]>maxVal){
                maxVal= rowMinima[i];
                rowIndx = i;
            } 
        }

    }
    if(minVal == maxVal){
        System.out.println("We Have Saddle Point "+maxVal+" at ("+(rowIndx+1)+","+(colIndx+1)+")");
    } else {
        System.out.println("There is no saddle point");
    }

}
public static void main(String[] args) {
    SaddlePoint sp = new SaddlePoint(3, 4);
    sp.run();
}

}
package com.mubasher.main;
导入java.util.Random;
公共类鞍点{
私有int[][]intMatrix;
私有int[]colMaxima;
私有整数[]最小值;
公共鞍点(内列,内行){
intMatrix=新的int[行][col];
colMaxima=新整数[col];
rowMinima=新整数[行];
填充矩阵();
}
私有空填充矩阵(){
随机=新随机();

for(int row=0;rowThank,但我需要intMatrix的方法..我需要使用参数(intMatrix m,int[]rows,int[]cols)。我做了一些研究,但没有找到任何。。我在这里发布了我在程序中需要的要求。你能告诉我或给我IntMatrix的代码吗?该链接上接受的答案是错误的。这与seadle point的定义不符。@Stepmarry0812也需要seadle point。我已经这样做了,但这里的要求与Stepma略有不同rry也是编程新手,我想:)@Mubasher如果接受的答案是错误的,请修复它…它仍然是一个副本。@单面体我无法在那里发布,因为问题因主题外而关闭。我根据维基百科的定义在这里发布我的代码。我认为将此ans标记为副本是错误的。在指向链接中,根据矩阵规则中的鞍点,标记的答案在那里是错误的。所以这家伙不值得这样做。但我同意这个人在提出问题之前显然并没有进行研究。
package com.mubasher.main;

import java.util.Random;

public class SaddlePoint {

private int[][] intMatrix;
private int[] colMaxima;
private int[] rowMinima;
public SaddlePoint(int col, int row){
    intMatrix = new int[row][col];
    colMaxima = new int[col];
    rowMinima = new int[row];
    fillMatrix();
}
private void fillMatrix() {
    Random random = new Random();
    for(int row = 0; row<intMatrix.length;row++){
        for(int col = 0;col<intMatrix[0].length;col++){
            intMatrix[row][col] = random.nextInt(21) - 10;
        }
    }
    printMatrix();
}
private void printMatrix(int[][] intMatrix) {
    for(int row = 0;row<intMatrix.length;row++){
        for(int col = 0; col<intMatrix[0].length;col++){
            System.out.print(intMatrix[row][col]+"   ");
        }
        System.out.println("");         
    }
    for(int i=0;i<intMatrix[0].length;i++)
    System.out.print("----");
    System.out.println("");
}
public void printMatrix() {
    printMatrix(intMatrix);
}
public void printArray(int[] array,boolean isHorizontaly) {
    for(int i = 0;i<array.length;i++){
        if(isHorizontaly){
            System.out.print(array[i]+"   ");
        } else {
            System.out.println(array[i]);
        }
    }

    if(isHorizontaly){System.out.println("");
    for(int i=0;i<array.length;i++)
        System.out.print("----");
    } else {
        System.out.println("----");
    }
    System.out.println("");
}

public void run(){
    int maxVal = 0,minVal=0;
    //minimum in each row
    for(int row = 0; row<intMatrix.length;row++){
        for(int col = 0;col<intMatrix[0].length;col++){
            if(col == 0 ) {
                rowMinima[row]=intMatrix[row][col]; // assume first val at (row,0) is minimum 
            } else {
                if(intMatrix[row][col]<rowMinima[row]){
                    rowMinima[row]=intMatrix[row][col]; // assign new minimum val
                }
            }
        }
    }
    //maximum in each column
    for(int col = 0; col<intMatrix[0].length;col++){
        for(int row = 0;row<intMatrix.length;row++){
            if(row == 0 ) {
                colMaxima[col]=intMatrix[row][col]; // for 
            } else {
                if(intMatrix[row][col]>colMaxima[col]){
                    colMaxima[col]=intMatrix[row][col]; // assign new max val
                }
            }
        }
    }
    printArray(colMaxima,true);
    printArray(rowMinima,false);
    int colIndx=0,rowIndx=0;
    for(int i =0;i<colMaxima.length;i++){
        if(i == 0 ) {
            minVal= colMaxima[i];
            colIndx=i;
        } else {
            if(colMaxima[i]<minVal){                    
                minVal= colMaxima[i];
                colIndx=i;
            } 
        }

    }
    for(int i =0;i<rowMinima.length;i++){
        if(i == 0 ) {
            maxVal= rowMinima[i];
            rowIndx = i;
        } else {
            if(rowMinima[i]>maxVal){
                maxVal= rowMinima[i];
                rowIndx = i;
            } 
        }

    }
    if(minVal == maxVal){
        System.out.println("We Have Saddle Point "+maxVal+" at ("+(rowIndx+1)+","+(colIndx+1)+")");
    } else {
        System.out.println("There is no saddle point");
    }

}
public static void main(String[] args) {
    SaddlePoint sp = new SaddlePoint(3, 4);
    sp.run();
}

}