11,479,096 members (63,690 online)

# Eight Queens Problem using VB.NET

, 4 Jan 2009 CPOL 39.1K 1.9K 28
 Rate this:
Backtracking solution approach to solve the eight queens problems and get all unique solutions

## Introduction

The Eight Queens Problem is a famous problem in AI field and a famous example about AI algorithms used to solve such a problem using backtracking method.

## Background

The solution shows all unique solutions to the eight queens problem which are exactly 92 solutions, 12 of which are distinct. The application also allows you to play the game yourself and try to find your own solution. The algorithm uses backtracking and depth first limited search to level 8 (8 queens) to find a solution.

## Using the Code

The `Queen `class is the basic object used in the algorithm and all over the project for graphics display too. It's fairly simple:

```Public Class Queen
Private mRow As Integer
Private mColumn As Integer

Public Sub New()
mRow = 0
mColumn = 0
End Sub

Public Sub New(ByVal Row As Byte, ByVal Column As Byte)
mRow = Row
mColumn = Column
End Sub

Public Property Row() As Integer
Get
Return mRow
End Get
Set(ByVal value As Integer)
mRow = value
End Set
End Property

Public Property Column() As Integer
Get
Return mColumn
End Get
Set(ByVal value As Integer)
mColumn = value
End Set
End Property
End Class	```

The `ChessBoard `user control draws the board and is actually where the algorithm of finding all solutions takes place. The function of interest is the `MoveQueen `function which moves a queen across the board, then checks if the new position is a good place or that the queen is attacked. The process is repeated recursively until all 8 queens are placed in a safe place.

```    Private Sub MoveQueen(ByVal Level As Integer)
If Level > 7 Then
For j As Integer = 0 To 7
For i As Integer = 0 To 7
If (Queens(j).Row = j) And (Queens(j).Column = i) Then
mCells(i, j) = True
Else
mCells(i, j) = False
End If
Next
Next
Exit Sub
End If
For j As Integer = 0 To 7
If Level < 8 Then
Queens(Level).Row = Level
Queens(Level).Column = j
If CheckAll(Level) Then MoveQueen(Level + 1)
End If
Next
End Sub	 ```

Finally, a call to `GetSolutions `will initiate the `MoveQueen `function starting from the first level, which is the depth of the current position in the depth tree. Reaching a level of 8 means we have found a solution. Otherwise, 1 level is decremented to the previous level and the search continues using different values. This process is called Backtracking.

```    Public Sub GetSolutions()
mUserPlay = False
Playing = False
Queens.Clear()
ResetCells()
DrawBoard()
For j As Integer = 0 To 7
Next
For i As Integer = 0 To 7
Queens(0).Row = 0
Queens(0).Column = i
MoveQueen(1)
Next
End Sub ```

## Points of Interest

What's interesting here is that the solutions are ordered according to the board from top-left to bottom-right so you can have all solutions by repeating click on solve button.

## History

• 4th January, 2009: Initial post

## Share

Software Developer (Senior) Microgen
Lebanon
For more articles and extreme topics please check out my personal website www.alitarhini.com

 First Prev Next
 ur coding is very well ganeskumar27-Jul-09 23:30 ganeskumar 27-Jul-09 23:30
 Good start... Dave Kreskowiak8-Jan-09 9:44 Dave Kreskowiak 8-Jan-09 9:44
 very interesting abou lwiss7-Jan-09 11:20 abou lwiss 7-Jan-09 11:20
 The code is nice, but the article needs...well...text Shane Story6-Jan-09 4:13 Shane Story 6-Jan-09 4:13
 Explanation Baconbutty5-Jan-09 22:23 Baconbutty 5-Jan-09 22:23
 Re: Explanation Invisionsoft6-Jan-09 7:52 Invisionsoft 6-Jan-09 7:52
 great article EngForce4-Jan-09 14:39 EngForce 4-Jan-09 14:39
 Last Visit: 31-Dec-99 19:00     Last Update: 22-May-15 17:23 Refresh 1