Note that there are some explanatory texts on larger screens.

plurals
  1. PO"Put N Queens", can it possible to run within acceptable time with N = 20?
    primarykey
    data
    text
    <p>The task is count how many solutions to put N queens in NxN board. I have tried to thought every possible case to improve the performace, but it take almost 50s to run with N = 15. Here's what I've done:</p> <pre><code>Dim resultCount As Integer = 0 Dim fieldSize As Integer = 0 Dim queenCount As Integer = 0 Dim availableCols As Boolean() Dim availableLeftDiagonal As Boolean() Dim availableRightDiagonal As Boolean() Private Sub butCalc_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles butCalc.Click Dim currentTime As Long = Now.Ticks 'Reset old result resultCount = 0 fieldSize = CInt(txtFieldSize.Text) queenCount = 0 ReDim availableCols(fieldSize - 1) For i As Integer = 0 To fieldSize - 1 availableCols(i) = True Next ReDim availableLeftDiagonal((fieldSize - 1) * 2) For i As Integer = 0 To (fieldSize - 1) * 2 availableLeftDiagonal(i) = True Next ReDim availableRightDiagonal((fieldSize - 1) * 2) For i As Integer = 0 To (fieldSize - 1) * 2 availableRightDiagonal(i) = True Next 'Calculate For x As Integer = 0 To fieldSize - 1 putQueen(x, 0) Next 'Print result txtResult.Text = "Found " &amp; resultCount &amp; " in " &amp; (Now.Ticks - currentTime) / 10000 &amp; " miliseconds." End Sub Private Sub putQueen(ByVal pX As Integer, ByVal pY As Integer) 'Put in result availableCols(pX) = False availableLeftDiagonal(pX + pY) = False availableRightDiagonal(pX - pY + (fieldSize - 1)) = False queenCount += 1 'Recursion If (queenCount = fieldSize) Then resultCount += 1 Else pY += 1 'pY = next row For x As Integer = 0 To fieldSize - 1 If (availableCols(x) AndAlso availableLeftDiagonal(x + pY) AndAlso availableRightDiagonal(x - pY + (fieldSize - 1))) Then putQueen(x, pY) Next pY -= 1 'Reset pY End If 'Roll up result availableCols(pX) = True availableLeftDiagonal(pX + pY) = True availableRightDiagonal(pX - pY + (fieldSize - 1)) = True queenCount -= 1 End Sub </code></pre> <p>Please tell me if it is possible (my teacher didn't give an exact time, he just tell "acceptable time". If it is possible, please tell me how, or just give me a clue!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload