How to avoid permutations in the n-Queens problem?
Note that your solution is not optimized - if you really want a speed boost, you should handle rotations / mirroring instead of looping through every possible combination. With a large board, this will be much more significant than looping through the solutions one extra time.

There are a few ways you could handle the permutations. I would handle them as a secondary check under if (n_queens_are_on_the_board), resulting in the following algorithm:

solve(queens){
    if (n_queens_are_on_the_board){
        if (solution_is_sorted) {
            remember_solution();
        }
        return;
    }
    for(x: 0 to n){
        for(y: 0 to n){
            if(current_position_not_attacked){
                add_queen_to_current_potision();
                solve(board);
                remove_prevously_added_queen();
            }
        }
    }
}


All that you have to do now is define a function to tell if the solution is sorted - again, there are a few ways you could do this. The simplest is probably to define the hash of a point to be point[0] * length(points) + point[1] and discard the solution if the hash of position n + 1 is less than the hash of position n. With this algorithm, you will end up with the solution (0,1) (1,3) (2,0) (3,2) from the sample provided.