Heim  >  Artikel  >  Backend-Entwicklung  >  Lösen Sie das 8-Königinnen-Problem in Python basierend auf der Teilmengenbaumvorlage der Backtracking-Methode

Lösen Sie das 8-Königinnen-Problem in Python basierend auf der Teilmengenbaumvorlage der Backtracking-Methode

巴扎黑
巴扎黑Original
2017-09-02 11:52:421326Durchsuche

In diesem Artikel wird hauptsächlich die Python-Implementierung des 8-Königin-Problems basierend auf der Teilmengenbaumvorlage der Backtracking-Methode vorgestellt. Er erläutert kurz das Prinzip des 8-Königinnen-Problems und analysiert die spezifischen Implementierungstechniken der zu lösenden Backtracking-Methoden-Teilbaumvorlage Das 8-Königinnen-Problem in Form von Beispielen. Freunde in Not können sich auf

beziehen. Dieser Artikel beschreibt das Beispiel der Python-Implementierung des 8-Königinnen-Problems basierend auf der Teilmengenbaumvorlage der Backtracking-Methode. Teilen Sie es als Referenz mit allen. Die Details lauten wie folgt:

Problem

Platzieren Sie acht Damen auf einem 8×8-Raster, damit sie sich nicht gegenseitig angreifen können , das heißt, es dürfen keine zwei Damen in derselben Reihe, Spalte oder Diagonale stehen. Wie viele Möglichkeiten gibt es, sie zu platzieren?

Analyse

Um das Problem zu vereinfachen, wird unter Berücksichtigung der Tatsache, dass sich die 8 Königinnen in verschiedenen Reihen befinden, eine Königin eingesetzt Jede Zeile und die Königin können in den Spalten 0, 1, 2, ..., 7 platziert werden. Wir glauben, dass die Königin in jeder Zeile 8 Zustände hat. Dann müssen wir nur noch die Teilmengenbaumvorlage anwenden, beginnend bei Zeile 0, von oben nach unten und die 8 Zustände der Königin in jeder Zeile durchlaufen.

Code:


'''
8皇后问题
'''
n = 8 
x = [] # 一个解(n元数组)
X = [] # 一组解
# 冲突检测:判断 x[k] 是否与前 x[0~k-1] 冲突
def conflict(k):
 global x
 for i in range(k):        # 遍历前 x[0~k-1]
  if x[i]==x[k] or abs(x[i]-x[k])==abs(i-k): # 判断是否与 x[k] 冲突
   return True
 return False
# 套用子集树模板
def queens(k): # 到达第k行
 global n, x, X
 if k >= n:   # 超出最底行
  #print(x)
  X.append(x[:]) # 保存(一个解),注意x[:]
 else:
  for i in range(n): # 遍历第 0~n-1 列(即n个状态)
   x.append(i)  # 皇后置于第i列,入栈
   if not conflict(k): # 剪枝
    queens(k+1)
   x.pop()   # 回溯,出栈
# 解的可视化(根据一个解x,复原棋盘。'X'表示皇后)
def show(x):
 global n
 for i in range(n):
  print('. ' * (x[i]) + 'X ' + '. '*(n-x[i]-1))
# 测试
queens(0) # 从第0行开始
print(X[-1], '\n')
show(X[-1])

Rendering

Das obige ist der detaillierte Inhalt vonLösen Sie das 8-Königinnen-Problem in Python basierend auf der Teilmengenbaumvorlage der Backtracking-Methode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn