Lab01. The N-Queens Problem Suppose you have N chess queens… …and a N by N chess board Can the...
-
Upload
augustine-patrick -
Category
Documents
-
view
218 -
download
1
Transcript of Lab01. The N-Queens Problem Suppose you have N chess queens… …and a N by N chess board Can the...
The N-Queens Problemlab01
The N-Queens ProblemSuppose you have N chess queens……and a N by N chess boardCan the queens be placed on board without
conflicts?Conflict: Any two queens on board attacking
each other is a conflict.
Attacking of queensTwo queens are attacking each other if they
are in the same rowin the same columnin the same diagonal
Denoting the positions of queensA 4 by 4 chess board. (4 rows, 4 columns)
row 1, column 1
row 2, column 3
row 3, column 1
A 8 by 8 chess board. (8 rows, 8 columns)
b4
a8
Pseudocode of N-queens ProblemInitialize a stack s where we can keep track
of the placement of queensPlace the first queen, push its position onto s
and set filled to 0.int filled =0;
Repeat these steps:if there are no conflicts
else if there is a conflict and there is room to shift the current queen rightward
else if there is a conflict and there is no room to shift the current queen rightward
increase filled by 1. If filled is now N, then algorithm is done. Otherwise move to the next row and place a queen in the first column. Push its position onto the stack.
Move the current queen rightward, adjusting the record on top of stack to indicate the new position.
Keep popping the stack, and decrease filled by 1 until a row is reached where the queen can be shifted rightward. Shift the queen rightward and adjust the record on top of stack to indicate the new position.
Continued…
Example:4-queues problem(4 queens on a 4 by 4 board)Initialize a stack s where we can keep track
of the placement of queens
Stack s
top
bottom
Place the first queen, push its position onto s and set filled to 0. int filled =0;
there are no conflicts, increase filled by 1.
move to the next row (row 2) and place a queen in the first column. Push its position onto the stack.
If there is a conflict (yellow line), then we shift the new queen to the next column. (rightward ). Adjust the record on top of stack to indicate the new position (ROW 2, COL 2).
If there is a conflict (yellow line), then we shift the new queen to the next column. (rightward ). Adjust the record on top of stack to indicate the new position (ROW 2, COL 3).
ROW 2, COL 3
there are no conflicts, increase filled by 1.
ROW 2, COL 3
move to the next row and place a queen in the first column. Push its position onto the stack.
ROW 3, COL 1
there is a conflict and there is room to shift the current queen rightward. Move the current queen rightward, adjusting the record on top of stack to indicate the new position. (ROW 2, COL 2)
there is a conflict and there is room to shift the current queen rightward. Move the current queen rightward, adjusting the record on top of stack to indicate the new position. (ROW 2, COL 3)
there is a conflict and there is room to shift the current queen rightward. Move the current queen rightward, adjusting the record on top of stack to indicate the new position. (ROW 2, COL 4)
there is a conflict and there is no room to shift the current queen rightward. Keep popping the stack, and decrease filled by 1 until a row is reached where the queen can be shifted rightward.
Shift the queen rightward. Adjust the record on top of stack to indicate the new position (ROW 2, COL 4).
ROW 2, COL 4
there are no conflicts, increase filled by 1 move to the next row and place a queen in
the first column. Push its position onto the stack (ROW2, COL 1).
there is a conflict and there is room to shift the current queen rightward. Move the current queen rightward, adjusting the record on top of stack to indicate the new position.
ROW 3, COL 2
ROW 3, COL 1
there are no conflicts. Increase filled by 1. move to the next row and place a queen in the
first column. Push its position onto the stack.
ROW 3, COL 2
3
ROW 3, COL 2
3
ROW 4, COL 1
there is a conflict and there is room to shift the current queen rightward.
Move the current queen rightward, adjusting the record on top of stack to indicate the new position.
ROW 3, COL 2
3
ROW 4, COL 2
ROW 3, COL 2
3
ROW 4, COL 1
there is a conflict and there is room to shift the current queen rightward.
Move the current queen rightward, adjusting the record on top of stack to indicate the new position.
ROW 3, COL 2
3
ROW 4, COL 3
ROW 3, COL 2
3
ROW 4, COL 2
ROW 3, COL 2
3
ROW 4, COL 4
ROW 3, COL 2
3
ROW 4, COL 3
ROW 3, COL 3
2
ROW 3, COL 2
3
ROW 4, COL 4
there is a conflict and there is no room to shift the current queen rightwardKeep popping the stack, and decrease filled by 1 until a row is reached where the queen can be shifted rightward. Shift the queen rightward. Adjust the record on top of stack to indicate the new position (ROW , COL )
ROW 3, COL 4
2
ROW 3, COL 3
2
there is a conflict and there is no room to shift the current queen rightwardKeep popping the stack, and decrease filled by 1 until a row is reached where the queen can be shifted rightward. Shift the queen rightward. Adjust the record on top of stack to indicate the new position (ROW , COL )
ROW 2, COL 4
2ROW 1, COL 1
ROW 2, COL 4
1=filled
Keep popping the stack, because current queen can not move rightward. decrease filled by 1Shift the queen rightward. Adjust the record on top of stack to indicate the new position (ROW 1 , COL 2).
ROW 1, COL 1
ROW 2, COL 4
ROW 1, COL 2
1=filled
0=filled
ROW 1, COL 2
1=filled
ROW 2, COL 1
ROW 1, COL 2
2=filled
ROW 2, COL 4
Two steps are omitted here.
ROW 1, COL 2
3=filled
ROW 2, COL 4
ROW 3, COL 1
ROW 1, COL 2
4=filled
ROW 2, COL 4
ROW 3, COL 1
ROW 4, COL 3
if there are no conflicts increase filled by 1. If filled is now N(N=4), then algorithm is done.