FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/Demo/scripts/queens.py at master · pylee/python · GitHub
pylee
/
python
Public
forked from
glix/python
Notifications
You must be signed in to change notification settings
Fork
0
Star
1
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python
/
Demo
/
scripts
/
queens.py
Copy path
More file actions
More file actions
Latest commit
History
History
History
executable file
·
85 lines (69 loc) · 2.19 KB
Breadcrumbs
python
/
Demo
/
scripts
/
queens.py
Copy path
File metadata and controls
executable file
·
85 lines (69 loc) · 2.19 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#! /usr/bin/env python
"""N queens problem.
The (well-known) problem is due to Niklaus Wirth.
This solution is inspired by Dijkstra (Structured Programming). It is
a classic recursive backtracking approach.
"""
N
=
8
# Default; command line overrides
class
Queens
:
def
__init__
(
self
,
n
=
N
):
self
.
n
=
n
self
.
reset
()
def
reset
(
self
):
n
=
self
.
n
self
.
y
=
[
None
]
*
n
# Where is the queen in column x
self
.
row
=
[
0
]
*
n
# Is row[y] safe?
self
.
up
=
[
0
]
*
(
2
*
n
-
1
)
# Is upward diagonal[x-y] safe?
self
.
down
=
[
0
]
*
(
2
*
n
-
1
)
# Is downward diagonal[x+y] safe?
self
.
nfound
=
0
# Instrumentation
def
solve
(
self
,
x
=
0
):
# Recursive solver
for
y
in
range
(
self
.
n
):
if
self
.
safe
(
x
,
y
):
self
.
place
(
x
,
y
)
if
x
+
1
==
self
.
n
:
self
.
display
()
else
:
self
.
solve
(
x
+
1
)
self
.
remove
(
x
,
y
)
def
safe
(
self
,
x
,
y
):
return
not
self
.
row
[
y
]
and
not
self
.
up
[
x
-
y
]
and
not
self
.
down
[
x
+
y
]
def
place
(
self
,
x
,
y
):
self
.
y
[
x
]
=
y
self
.
row
[
y
]
=
1
self
.
up
[
x
-
y
]
=
1
self
.
down
[
x
+
y
]
=
1
def
remove
(
self
,
x
,
y
):
self
.
y
[
x
]
=
None
self
.
row
[
y
]
=
0
self
.
up
[
x
-
y
]
=
0
self
.
down
[
x
+
y
]
=
0
silent
=
0
# If set, count solutions only
def
display
(
self
):
self
.
nfound
=
self
.
nfound
+
1
if
self
.
silent
:
return
print
'+-'
+
'--'
*
self
.
n
+
'+'
for
y
in
range
(
self
.
n
-
1
,
-
1
,
-
1
):
print
'|'
,
for
x
in
range
(
self
.
n
):
if
self
.
y
[
x
]
==
y
:
print
"Q"
,
else
:
print
"."
,
print
'|'
print
'+-'
+
'--'
*
self
.
n
+
'+'
def
main
():
import
sys
silent
=
0
n
=
N
if
sys
.
argv
[
1
:
2
]
==
[
'-n'
]:
silent
=
1
del
sys
.
argv
[
1
]
if
sys
.
argv
[
1
:]:
n
=
int
(
sys
.
argv
[
1
])
q
=
Queens
(
n
)
q
.
silent
=
silent
q
.
solve
()
print
"Found"
,
q
.
nfound
,
"solutions."
if
__name__
==
"__main__"
:
main
()
Back
|
FazBrowse Home
|
New Git URL