ich möchte ein Turmproblem mit einem 8x8 Schachbrett behandeln, wo mir das Programm alle möglichen Lösungen ausgibt, wie 8 Türme so platziert werden können, dass sie sich nicht gegenseitig bedrohen, d.h., dass es in jeder Reihe und Linie jeweils nur einen Turm gibt.
Zuerst einmal mein Grundprogramm:
Code: Alles auswählen
class Schachbrett():
def __init__(self):
self._schachbrett = [[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0],\
[0,0,0,0,0,0,0,0]]
self.maxi_reihe = 8
self.maxi_linie = 8
def turm_bedroht(self,reihe,linie):
spielfeld = self._schachbrett
if reihe >= 0 and reihe <= 7:
x = reihe
else:
print("Reihe existiert nicht")
return None
if linie >= 0 and linie <= 7:
y = linie
else:
print("Linie existiert nicht")
return None
if spielfeld[x][y] == "t":
return True
if "t" in spielfeld[x]:
return True
if "t" not in spielfeld[x]:
for zahl in range(0,len(spielfeld)):
if spielfeld[zahl][y] == "t":
return True
else:
return False
def setze_tuerme(self, anfangsreihe, anfangslinie):
self._ergebnis = []
self._x = anfangsreihe
self._y = anfangslinie
if self._x <= 7 and self._y <= 7:
self._schachbrett[self._x][self._y] = "t"
return s.setze_tuerme(anfangsreihe+1, anfangslinie+1)
if self._x > 7 and self._y > 7:
self._x -= 1
self._y -= 1
print()
print("Spielfeld:")
print()
for i in self._schachbrett:
print(i)
print()
self._ergebnis.append(self._schachbrett)
def anzahl_tuerme(self):
self._zaehler = 0
for i in self._schachbrett:
if "t" in i:
self._zaehler += 1
self._anzahl = self._zaehler
return self._zaehler
print()
def ergebnis_formatiert(self):
print("Ergebnis:")
print()
for i in self._ergebnis:
for i in self._schachbrett:
print(i)
def turmproblem(self):
letzer_turm_x = self._x
letzter_turm_y = self._y
s.turm_entfernen(self._x,self._y)
return s.ergebnis_formatiert()
def turm_entfernen(self, reihe, linie):
if reihe < self.maxi_reihe and linie < self.maxi_linie:
self._x = reihe
self._y = linie
if self._schachbrett[self._x][self._y] == "t":
self._schachbrett[self._x][self._y] = 0
s.feld_formatieren(self._schachbrett)
print()
return True
else:
return False
s = Schachbrett()
s.setze_tuerme(0,0)
Ich habe also schon eine Funktion geschrieben, die überprüft, ob ein bestimmtes Feld bedroht ist, oder nicht (turm_bedroht) und eine Funktion anzahl_tuerme, die ich später bei der Rekursion benutzen wollte, damit ich weiß, wann ich eine neue Lösung gefunden habe, nämlich dann, wenn ich 8 Türme ohne Probleme gesetzt habe.
Außerdem habe ich die "setze_tuerme" Funktion, mit der ich quasi meine erste Lösung habe. Ich setze von oben links ([0,0]) bis unten rechts ([7,7]) -also diagonal- die Türme und habe dann meine erste Lösung.
Nun weiß ich jedoch nicht recht, wie ich weiter vorgehen muss, um alle möglichen Lösungen durchzuspielen. Könnte mir jemand eventuell die Vorgehensweise (rekursiv) schildern, ohne den dazugehörigen Quellcode anzugeben? Ich würde es dann gerne selbst in der Funktion "turmproblem" programmieren, weiß jedoch nicht genau wie ich das machen soll.