1 import copy 2 3 4 def adatok_megadasa(): 5 # Érvényes táblaméret kierőszakolása 6 7 while True: 8 try: 9 meret = int(input('Mi legyen a tábla mérete? n = ')) 10 if meret == 1: 11 print('Hülyeség, legalább 4 legyen a méret! ') 12 if meret <= 3: 13 print('Mondom >= 4 legyen!') 14 continue 15 return meret 16 except ValueError: 17 print('Baromság! Szedd össze magad!') 18 19 20 def tabla_megadasa(meret): 21 # Előállítja az nxn-es táblát 22 tabla = [0] * meret 23 for i_sor in range(meret): 24 tabla[i_sor] = [0] * meret 25 return tabla 26 27 28 def print_megoldasok(megoldasok, meret): 29 # Megoldások kiírása 30 for megold in megoldasok: 31 for sor in megold: 32 print(sor) 33 print() 34 35 36 def jo_eset(tabla, sor, oszl, meret): 37 # sor,oszl pozíció vizsgálata 38 39 # balra eső mezők az adott sorban 40 for i_oszl in range(oszl): 41 if tabla[sor][i_oszl] == 1: 42 return False 43 44 # átlósan balra fel 45 i_sor, i_oszl = sor, oszl 46 while i_sor >= 0 and i_oszl >= 0: 47 if tabla[i_sor][i_oszl] == 1: 48 return False 49 i_sor -= 1 50 i_oszl -= 1 51 52 # átlósan balra le 53 j_sor, j_oszl = sor, oszl 54 while j_sor < meret and j_oszl >= 0: 55 if tabla[j_sor][j_oszl] == 1: 56 return False 57 j_sor += 1 58 j_oszl -= 1 59 60 return True 61 62 63 def megoldas(tabla, oszl, meret): 64 if oszl >= meret: 65 return 66 67 for sor in range(meret): 68 if jo_eset(tabla, sor, oszl, meret): 69 tabla[sor][oszl] = 1 70 if oszl == meret - 1: 71 hozzaad_megoldasokhoz(tabla) 72 tabla[sor][oszl] = 0 73 return 74 megoldas(tabla, oszl + 1, meret) 75 # backtrack 76 tabla[sor][oszl] = 0 77 78 79 def hozzaad_megoldasokhoz(tabla): 80 global megoldasok 81 mentett_tabla = copy.deepcopy(tabla) 82 megoldasok.append(mentett_tabla) 83 84 85 meret = adatok_megadasa() 86 tabla = tabla_megadasa(meret) 87 megoldasok = [] 88 megoldas(tabla, 0, meret) 89 print_megoldasok(megoldasok, meret) 90 91 print('Összes megoldás száma = {}'.format(len(megoldasok)))