¿Cómo se comprueba una fila de una matriz de caracteres 2D para un elemento específico y luego contar cuántas de ese elemento se encuentran en la fila? (Java)

CB-9099:

Este es un problema N Queens, donde se le ha dado la junta y debe utilizar métodos para comprobar donde las filas, las columnas y en diagonal. Mi método para comprobar la fila está aquí: Funciona si estuviera contando las reinas en su conjunto, sino que sólo desea comprobar fila por fila, al restablecer el conteo y recuento de filas .

private boolean oneQueenPerRow() //ensures that there is only 1 queen in each row
{
    int count = 0;
    int rowcount = 0;
    for (int i = 0; i < board.length; i++)
    {
        //count  = 0;
        for (int j = 0; j < board.length; j++)
        {
            //rowcount = 0;
            while (rowcount <= size-1)
            {
                if (board[i][j] == QUEEN)
                {
                    count++;
                    rowcount++;  
                }
                if (board[i][j] == BLANK)
                {
                    rowcount++;
                }
            }
            if (count != 1) // if size replaces 1 then it works, but counts Q's as a whole
            {
                return false;
            }             
        } 
    }
    return true;
}

La idea es que todos los métodos devuelven verdadero o falso y luego se les llama por el método booleano final. Si todos son cierto que la junta es una solución válida. Si una es falsa, la junta no es una solución válida. Aquí es un ejemplo de archivo de texto se me dio:

4 BQBB BBBQ QBBB BBQB

(Deben ser apilados ..)

No tengo el conocimiento suficiente acerca de las matrices y los bucles de saber si esto va todo el camino a través de todo el archivo o sólo una fila a la vez, aunque la confianza en mí cuando digo que he agotado todos los recursos.

He estado trabajando en esto durante días y no puedo entenderlo y conexión con mi profesor es irregular a causa de este virus! Necesito desesperadamente ayuda!

private boolean noDiagonalAttacks() //makes sure that Queens cannot attack diagonally
    {
        for (int i = 0; i < board.length; i++)
        {
            int count = 0;
            for (int j = 0; j < board.length; j++)
            {
                if (board[i][j] == QUEEN)
                {
                    if(this.toRight() == false || this.toLeft() == false)
                    {
                        return false;
                    }
                    count++;
                }
            }
        }
        return true;
    }

    private boolean toRight()
    {
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board.length; j++)
            {
                while (board[i][j] != board[i][size-1] || board[i][j] != board[size-1][j]) //add a count to this?
                {
                    if (board[i][j] == QUEEN)
                    {
                        return false;
                    }
                }
            }    
        } 
        return true;       
    }

    private boolean toLeft()
    {
        for (int i = 0; i < board.length; i++)
        {
            for (int j = 0; j < board.length; j++)
            {
                while (board[i][j] != board[i][0] || board[i][j] != board[size-1][j])
                {
                    if (board[i][j] == QUEEN)
                    {
                        return false;
                    }
                }
            }
        }    
        return true;
    }
Miguel Avila :

Lo probé hace una vez y funcionó, espero que ayude.

private boolean oneQueenPerRow() {
    int foundQueens;
    for (int i = 0; i < board.length; i++) {
        foundQueens = 0;//each loop is a checked row
        for (int j = 0; j < board.length; j++) {
            if (board[i][j] == QUEEN)
                foundQueens++;
        }
        if (foundQueens > 1) return false;
    }
    return true;
}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=385572&siteId=1
Recomendado
Clasificación