Skip to content

Commit 201c03d

Browse files
marwterzikostis
andauthored
Added N-Queens solution (#63)
* Add N-Queens solution * Update N_Queens.input --------- Co-authored-by: Kostis Sagonas <kostis@cs.ntua.gr>
1 parent 738e970 commit 201c03d

File tree

3 files changed

+112
-0
lines changed

3 files changed

+112
-0
lines changed

dana/programs/N_Queens.dana

Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
def main
2+
3+
def printBoard: board as byte[][], n as int
4+
var i j is int
5+
i := 0
6+
loop:
7+
if i >= n :
8+
break
9+
j := 0
10+
loop:
11+
if j >= n :
12+
break
13+
if board[i][j] = 1 :
14+
writeString: "Q "
15+
else :
16+
writeString: ". "
17+
j := j + 1
18+
writeString: "\n"
19+
i := i + 1
20+
writeString: "\n"
21+
22+
def isSafe is byte: board as byte[][], row col n as int
23+
var i j is int
24+
25+
# check columns
26+
i := 0
27+
loop:
28+
if i >= row :
29+
break
30+
if board[i][col] = 1 :
31+
return : 0
32+
i := i + 1
33+
34+
# check left diagonal
35+
i := row - 1
36+
j := col - 1
37+
loop:
38+
if i < 0 or j < 0 :
39+
break
40+
if board[i][j] = 1 :
41+
return : 0
42+
i := i - 1
43+
j := j - 1
44+
45+
# check right diagonal
46+
i := row - 1
47+
j := col + 1
48+
loop:
49+
if i < 0 or j >= n :
50+
break
51+
if board[i][j] = 1 :
52+
return : 0
53+
i := i - 1
54+
j := j + 1
55+
56+
return : 1
57+
58+
def solveNQueensUtil is byte: board as byte[][], row n as int
59+
if row = n :
60+
printBoard: board, n
61+
return : 1
62+
63+
var col is int
64+
col := 0
65+
loop:
66+
if col >= n :
67+
break
68+
if isSafe: board, row, col, n :
69+
board[row][col] := 1
70+
if solveNQueensUtil: board, row + 1, n :
71+
return : 1
72+
board[row][col] := 0
73+
col := col + 1
74+
75+
return : 0
76+
77+
def solveNQueens: n as int
78+
var board is byte[n][n]
79+
var i j is int
80+
81+
i := 0
82+
loop:
83+
if i >= n :
84+
break
85+
j := 0
86+
loop:
87+
if j >= n :
88+
break
89+
board[i][j] := 0
90+
j := j + 1
91+
i := i + 1
92+
93+
if solveNQueensUtil: board, 0, n :
94+
writeString: "Solution found.\n"
95+
else :
96+
writeString: "No solution exists.\n"
97+
98+
var size is int
99+
writeString: "Enter board size: "
100+
size := readInteger()
101+
solveNQueens: size

dana/programs/N_Queens.input

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
8

dana/programs/N_Queens.result

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
Q . . . . . . .
2+
. . . . . . Q .
3+
. . . . Q . . .
4+
. . . Q . . . .
5+
. . Q . . . . .
6+
. Q . . . . . .
7+
. . . . . Q . .
8+
. . . . . . . Q
9+
10+
Solution found.

0 commit comments

Comments
 (0)