Jump to content

Sudoku na Diagonal em C


tiko165

Recommended Posts

Boa tarde,

Preciso da vossa ajuda, com este seguinte código (não feito por mim), para resolver uma matriz Sudoku e que utiliza a regra do BackTracking.

Pretendo implementar uma regra de validação em diagonal (cima>baixo e baixo>cima)

https://gist.github.com/bopbi/c9f94b1b981b84bcb02b

Acrescentei as seguintes funções, e os seus parâmetros. 
Consegues perceber o porquê que desta forma não funciona.

 

int verify_diagonal_down(int matrix[N][N], int num) {
    for (int row=0, col=0; row<N && col<N; row++, col++) {
        if(row==col && matrix[row][col] == num){
            printf("ABC: [%d][%d],, %d == %d\n", row, col, matrix[row][col], num);
            return 1;
        }
    }
    return 0;
}


int verify_diagonal_up(int matrix[N][N], int row, int col, int num) {
    if(row + col == N - 1){
        for (int x=N, y=0; x>=0 && y<N; x--, y++) {
            return 1;
        }
        return 0;
    }
}
int is_safe_num(int matrix[N][N], int row, int col, int num) {

    return  !verify_box(matrix, row - (row % CUBE), col - (col % CUBE), num)//Valida Cubo
            && !verify_row(matrix, row, num)//Valida linha
            && !verify_col(matrix, col, num)//valida coluna
            && !verify_diagonal_down(matrix, num)//Valida diagonal LEFT > DOWN
            && !verify_diagonal_up(matrix, row, col, num)//Valida diagonal LEFT > UP
        ;
}

 

Obrigado

collectioneuro300px.png
Link to comment
Share on other sites

  • 2 months later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.