Java 具有最高边界和的二维矩阵方子矩阵
考虑一个由0到9的数字组成的二维矩阵,其宽度和高度可变。求边界元素和最大的方子矩阵 输入: 矩阵输入宽度和高度:6 8 数字从0到9的输入矩阵:Java 具有最高边界和的二维矩阵方子矩阵,java,Java,考虑一个由0到9的数字组成的二维矩阵,其宽度和高度可变。求边界元素和最大的方子矩阵 输入: 矩阵输入宽度和高度:6 8 数字从0到9的输入矩阵: 2 0 6 1 2 5 1 0 5 0 1 3 3 0 1 2 4 1 0 1 3 1 1 9 4 1 0 8 5 2 0 1 0 1 2 3 6 5 3 1 0 2 0 0 1 6 0 4 输入方子矩阵的最大宽度(对于方子矩阵,高度和宽度相同):3 输出: 由于高亮显示的子矩阵之和最大(仅计算边界元素之和2,4,1,9,2,5,8,1)
2 0 6 1 2 5
1 0 5 0 1 3
3 0 1 2 4 1
0 1 3 1 1 9
4 1 0 8 5 2
0 1 0 1 2 3
6 5 3 1 0 2
0 0 1 6 0 4
输入方子矩阵的最大宽度(对于方子矩阵,高度和宽度相同):3
输出:
由于高亮显示的子矩阵之和最大(仅计算边界元素之和2,4,1,9,2,5,8,1)
输出应为:
2 4 1
1 1 9
8 5 2
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
公共类矩阵axsum{
公共静态void main(字符串[]args){
MatrixMaxSum maxSum=新MatrixMaxSum();
矩阵矩阵=maxSum.readInput();
列表子矩阵=maxSum.FindAllSubMatrix(矩阵);
System.out.println(“总子矩阵:+子矩阵.size());
SubMatrixSum SubMatrixSum=subMatrices.stream().sorted((s1,s2)->s2.sum.compareTo(s1.sum)).findFirst().get();
System.out.println(子矩阵);
}
私有列表findallsubmatrix(矩阵m){
List subs=new ArrayList();
int行=0,列;
while(行w | sm>h){
抛出新的运行时异常(“无效输入”);
}
返回新矩阵(m,sm);
}否则{
抛出新的运行时异常(“无效输入”);
}
}捕获(IOE异常){
}
返回null;
}
}
类子矩阵{
int[][]子矩阵;
整数和;
公共子矩阵sum(int[][]子矩阵,整数和){
超级();
this.subMatrix=subMatrix;
this.sum=sum;
}
@凌驾
公共字符串toString(){
StringBuilder sb=新的StringBuilder();
sb.追加(“矩阵:\n”);
对于(int i=0;i
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.ArrayList;
导入java.util.List;
公共类矩阵axsum{
公共静态void main(字符串[]args){
MatrixMaxSum maxSum=新MatrixMaxSum();
矩阵矩阵=maxSum.readInput();
列表子矩阵=maxSum.FindAllSubMatrix(矩阵);
System.out.println(“总子矩阵:+子矩阵.size());
SubMatrixSum SubMatrixSum=subMatrices.stream().sorted((s1,s2)->s2.sum.compareTo(s1.sum)).findFirst().get();
System.out.println(子矩阵);
}
私有列表findallsubmatrix(矩阵m){
List subs=new ArrayList();
int行=0,列;
while(行 2 4 1
1 1 9
8 5 2
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class MatrixMaxSum {
public static void main(String[] args) {
MatrixMaxSum maxSum = new MatrixMaxSum();
Matrix matrix = maxSum.readInput();
List<SubMatrixSum> subMatrices = maxSum.findAllSubMatrices(matrix);
System.out.println("Total SubMatrices: " + subMatrices.size());
SubMatrixSum subMatrixSum = subMatrices.stream().sorted((s1, s2) -> s2.sum.compareTo(s1.sum)).findFirst().get();
System.out.println(subMatrixSum);
}
private List<SubMatrixSum> findAllSubMatrices(Matrix m) {
List<SubMatrixSum> subs = new ArrayList<>();
int row = 0, column;
while (row < m.matrix.length - m.subMatrixSize + 1) {
column = 0;
while (column < m.matrix[0].length - m.subMatrixSize + 1) {
int[][] sub = new int[m.subMatrixSize][m.subMatrixSize];
int sum = 0;
if (row == 0 || row == m.matrix.length || column == 0 || column == m.matrix[0].length) {
for (int i = 0, mi = row; i < m.subMatrixSize; i++, mi++) {
for (int j = 0, mj = column; j < m.subMatrixSize; j++, mj++) {
sub[i][j] = m.matrix[mi][mj];
sum += sub[i][j];
}
}
subs.add(new SubMatrixSum(sub, sum));
}
column++;
}
row++;
}
return subs;
}
private Matrix readInput() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Input width and height of matrix:");
String line = br.readLine();
String[] wh = line.split("\\s+");
if (wh.length == 2) {
int w = Integer.parseInt(wh[0]);
int h = Integer.parseInt(wh[1]);
int[][] m = new int[h][w];
System.out.println("Input matrix with numbers from 0-9 :");
for (int i = 0; i < h; i++) {
line = br.readLine();
String[] row = line.split("\\s+");
if (row.length == w) {
for (int j = 0; j < w; j++) {
m[i][j] = Integer.parseInt(row[j]);
}
} else {
throw new RuntimeException("Invalid input");
}
}
System.out.println("Input maximum width of square submatrix:");
line = br.readLine();
int sm = Integer.parseInt(line);
if (sm > w || sm > h) {
throw new RuntimeException("Invalid input");
}
return new Matrix(m, sm);
} else {
throw new RuntimeException("Invalid input");
}
} catch (IOException e) {
}
return null;
}
}
class SubMatrixSum {
int[][] subMatrix;
Integer sum;
public SubMatrixSum(int[][] subMatrix, Integer sum) {
super();
this.subMatrix = subMatrix;
this.sum = sum;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Matrix: \n");
for (int i = 0; i < subMatrix.length; i++) {
for (int j = 0; j < subMatrix[i].length; j++) {
sb.append(subMatrix[i][j] + " ");
}
sb.append("\n");
}
sb.append("Sum: " + sum);
return sb.toString();
}
}
class Matrix {
int[][] matrix;
int subMatrixSize;
public Matrix(int[][] matrix, int subMatrixSize) {
super();
this.matrix = matrix;
this.subMatrixSize = subMatrixSize;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
sb.append(matrix[i][j] + " ");
}
sb.append("\n");
}
return sb.toString();
}
}
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public class MatrixMaxSum {
public static void main(String[] args) {
MatrixMaxSum maxSum = new MatrixMaxSum();
Matrix matrix = maxSum.readInput();
List<SubMatrixSum> subMatrices = maxSum.findAllSubMatrices(matrix);
System.out.println("Total SubMatrices: " + subMatrices.size());
SubMatrixSum subMatrixSum = subMatrices.stream().sorted((s1, s2) -> s2.sum.compareTo(s1.sum)).findFirst().get();
System.out.println(subMatrixSum);
}
private List<SubMatrixSum> findAllSubMatrices(Matrix m) {
List<SubMatrixSum> subs = new ArrayList<>();
int row = 0, column;
while (row < m.matrix.length - m.subMatrixSize + 1) {
column = 0;
while (column < m.matrix[0].length - m.subMatrixSize + 1) {
int[][] sub = new int[m.subMatrixSize][m.subMatrixSize];
int sum = 0;
if (row == 0 || row == m.matrix.length || column == 0 || column == m.matrix[0].length) {
for (int i = 0, mi = row; i < m.subMatrixSize; i++, mi++) {
for (int j = 0, mj = column; j < m.subMatrixSize; j++, mj++) {
sub[i][j] = m.matrix[mi][mj];
sum += sub[i][j];
}
}
subs.add(new SubMatrixSum(sub, sum));
}
column++;
}
row++;
}
return subs;
}
private Matrix readInput() {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Input width and height of matrix:");
String line = br.readLine();
String[] wh = line.split("\\s+");
if (wh.length == 2) {
int w = Integer.parseInt(wh[0]);
int h = Integer.parseInt(wh[1]);
int[][] m = new int[h][w];
System.out.println("Input matrix with numbers from 0-9 :");
for (int i = 0; i < h; i++) {
line = br.readLine();
String[] row = line.split("\\s+");
if (row.length == w) {
for (int j = 0; j < w; j++) {
m[i][j] = Integer.parseInt(row[j]);
}
} else {
throw new RuntimeException("Invalid input");
}
}
System.out.println("Input maximum width of square submatrix:");
line = br.readLine();
int sm = Integer.parseInt(line);
if (sm > w || sm > h) {
throw new RuntimeException("Invalid input");
}
return new Matrix(m, sm);
} else {
throw new RuntimeException("Invalid input");
}
} catch (IOException e) {
}
return null;
}
}
class SubMatrixSum {
int[][] subMatrix;
Integer sum;
public SubMatrixSum(int[][] subMatrix, Integer sum) {
super();
this.subMatrix = subMatrix;
this.sum = sum;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("Matrix: \n");
for (int i = 0; i < subMatrix.length; i++) {
for (int j = 0; j < subMatrix[i].length; j++) {
sb.append(subMatrix[i][j] + " ");
}
sb.append("\n");
}
sb.append("Sum: " + sum);
return sb.toString();
}
}
class Matrix {
int[][] matrix;
int subMatrixSize;
public Matrix(int[][] matrix, int subMatrixSize) {
super();
this.matrix = matrix;
this.subMatrixSize = subMatrixSize;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
sb.append(matrix[i][j] + " ");
}
sb.append("\n");
}
return sb.toString();
}
}
import java.lang.*;
import java.io.*;
import java.util.*;
public class Main
{
public static int[][] getSubmatrix(int matrix[][],int hight, int width,int n)
{
int result[][] = new int[n][n];
int max=0;
int h=0,w=0;
while(h<hight-n)
{
int temp[][] = new int[n][n];
for(int i=0; i<n;i++)
{
for(int j=0; j<n; j++)
{
temp[i][j]=matrix[h+i][w+j];
}
}
int tempSum = getSum(temp,n);
if(tempSum>=max)
{
max = tempSum;
result = temp;
}
if(h<hight-n)
{
if(w<width-n)
{
w++;
}
else
{
w=0;
h++;
}
}
}
return result;
}
public static int getSum(int mat[][],int n)
{
int sum=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
sum += mat[i][j];
}
}
return sum;
}
public static void main(String[] args)
{
Scanner scan = new Scanner(System.in);
// this programme works on stdin stout
// if you want to run on manual input then remove comments for Sysout() fun
// System.out.println("Input hight and width of matrix: ");
int width = scan.nextInt();
int hight = scan.nextInt();
int matrix[][] = new int[hight][width];
// this is for inputting value of matrix
// System.out.println("input matrix with number 0 to 9: ");
for(int i=0;i<hight;i++)
for(int j=0;j<width;j++)
matrix[i][j]=scan.nextInt();
// this is for required length of submatrix
// System.out.println("Input maximum width of square matrix");
int n = scan.nextInt();
//calling function submatrix
int resultMatrix[][] = new int[n][n];
resultMatrix = getSubmatrix(matrix,hight,width,n);
for(int i=0; i<n; i++)
{
for(int j=0;j<n; j++)
{
System.out.print(resultMatrix[i][j]+" ");
}
System.out.println();
}
}
}