Python :: Aufgabe #76
2 Lösungen

Das Damenproblem (Teil I)
Fortgeschrittener - Python
von ElPapito
- 07.05.2015 um 11:42 Uhr
Das klassische Damenproblem besteht aus einem 8x8 Schachfeld und 8 Damen.
Die Aufgabe besteht darin die 8 Damen so zu positionieren, dass sie sich gegenseitig nicht bedrohen, d.h. es dürfen keine zwei Damen in der gleichen Zeile/Spalte/Diagonale stehen.
Schreibe ein kleines Programm, welches ausgibt wie viele Lösungen existieren.
Die Aufgabe besteht darin die 8 Damen so zu positionieren, dass sie sich gegenseitig nicht bedrohen, d.h. es dürfen keine zwei Damen in der gleichen Zeile/Spalte/Diagonale stehen.
Schreibe ein kleines Programm, welches ausgibt wie viele Lösungen existieren.
Lösungen:

#allgemein: Bei jeder prüfung: alle vorhergegangenen ungleich der neuen #und alle vorhergegangenen +- Differenz ihrer Indexe ungleich der neuen l=[] def damenprüfung(x,y): ö=0 for ä in range(len(x)): if x[ä]==y or x[ä]+(len(x)-ä)==y or x[ä]-(len(x)-ä)==y: ö=ö+1 if ö>0: return("j") else: return("n") l.append([]) for i in range(8): l[-1].append([i+1]) for a in range(7): l.append([]) for p in range(len(l[a])): for k in range(8): if damenprüfung(l[a][p],k+1)!="j": l[-1].append([]) for s in range(len(l[a][p])): l[-1][-1].append(l[a][p][s]) l[-1][-1].append(k+1) print(len(l[7]))

def eq(solutions, queens, fields): if len(queens) == 8: solutions.append(queens) else : next_queen = [ f for f in fields if f[1] == len(queens)] # one queen per row for q in next_queen: new_queens = list(queens) new_queens.append(q) new_fields = [f for f in fields if not ( f[0]==q[0] or f[1]==q[1] or f[0]-f[1]==q[0]-q[1] or f[0]+f[1]==q[0]+q[1] )] eq(solutions, new_queens, new_fields) def eight_queens(): solutions = [] eq(solutions, [], [[x,y] for x in range(8) for y in range(8)]) return len(solutions)