0

我试图找出矩阵 [][] 在不同方向(水平/垂直或两者)是否对称,并找到本教程 https://www.geeksforgeeks.org/check-horizo ​​ntal-vertical-symmetry-binary- matrix/ 并用我的矩阵进行了尝试,但它似乎无法正常工作。这是我当前的代码和我得到的输出:

示例矩阵:

111
144
144

我通过以下方式调用教程中的方法:

 // test for symmetrie 
    checkHV(matrix, rows, colums);

在这种情况下,行和列都是 3。在我看来,它应该输出 NO,但当前输出是 VERTICAL(总是,所有矩阵..)。这是为什么?以及如何修改代码以使其对我正常工作?谢谢!

这里是教程中的代码:

 static void checkHV(int [][]arr, int N,
                int M)
{

// Initializing as both horizontal 
// and vertical symmetric.
boolean horizontal = true;
boolean vertical = true;

// Checking for Horizontal Symmetry. 
// We compare first row with last
// row, second row with second
// last row and so on.
for (int i = 0, k = N - 1; 
         i < N / 2; i++, k--)
{

    // Checking each cell of a column.
    for (int j = 0; j < M; j++)
    {

        // check if every cell is identical
        if (arr[i][j] != arr[k][j])
        {
            horizontal = false;
            break;
        }
    }
}

// Checking for Vertical Symmetry. We compare
// first column with last column, second xolumn
// with second last column and so on.
for (int i = 0, k = M - 1;
         i < M / 2; i++, k--)
{

    // Checking each cell of a row.
    for (int j = 0; j < N; j++)
    {
        // check if every cell is identical
        if (arr[i][j] != arr[k][j])
        {
            horizontal = false;
            break;
        }
    }
}

if (!horizontal && !vertical)
    System.out.println("NO");

else if (horizontal && !vertical)
    System.out.println("HORIZONTAL");

else if (vertical && !horizontal)
    System.out.println("VERTICAL");

else
    System.out.println("BOTH");
}

编辑: 在将 horitzontal = true 更改为 vertical = true 后,代码仍然不能与矩形矩阵一起正常工作,所以 fe 4 * 2,给了我一个超出范围的数组.. 矩阵:

1112
2212

行 = 2 列 = 4..

4

2 回答 2

0
public static boolean isSymmetricHorizontally(int[][] matrix) {
    for(int rowL = 0, rowH = matrix.length - 1; rowL < rowH; rowL++, rowH--)
        for(int col = 0; col < matrix[0].length; col++)
            if(matrix[rowL][col] != matrix[rowH][col])
                return false;
    
    return true;
}

public static boolean isSymmetricVertically(int[][] matrix) {
    for(int colL = 0, colH = matrix[0].length - 1; colL < colH; colL++, colH--)
        for(int row = 0; row < matrix[0].length; row++)
            if(matrix[row][colL] != matrix[row][colL])
                return false;
    
    return true;
}
于 2020-10-16T14:15:31.763 回答
0

尝试这个:

 static void checkHV(int [][]arr, int N,
            int M)
{

// Initializing as both horizontal 
// and vertical symmetric.
boolean horizontal = true;
boolean vertical = true;

// Checking for Horizontal Symmetry. 
// We compare first row with last
// row, second row with second
// last row and so on.
for (int i = 0, k = N - 1; 
         i < N / 2; i++, k--)
{

    // Checking each cell of a column.
    for (int j = 0; j < M; j++)
    {

        // check if every cell is identical
        if (arr[i][j] != arr[k][j])
        {
            horizontal = false;
            break;
        }
    }
}

// Checking for Vertical Symmetry. We compare
// first column with last column, second xolumn
// with second last column and so on.
for (int i = 0, k = M - 1;
         i < M / 2; i++, k--)
{

    // Checking each cell of a row.
    for (int j = 0; j < N; j++)
    {
        // check if every cell is identical
        if (arr[j][i] != arr[j][k])
        {
            vertical = false;
            break;
        }
    }
}

if (!horizontal && !vertical)
    System.out.println("NO");

else if (horizontal && !vertical)
    System.out.println("HORIZONTAL");

else if (vertical && !horizontal)
    System.out.println("VERTICAL");

else
    System.out.println("BOTH");
}
于 2020-10-16T13:54:39.707 回答