MiaShuki

N-Кралици

Jan 24th, 2021
543
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. N-Кралици Problem 1 (2 / 13)
  2. Дадена е nxn табла за шах. Треба да се постават n кралици на таблата така што ниедна кралица да не се напаѓа. Кралиците може да се постават на било која позиција која сметаме дека е најсоодветна. Единственото ограничување е дека не треба да се напаѓаат. Можните придвижувања на кралицата ви се дадени на сликата подолу:
  3.  
  4. enter image description here
  5.  
  6. На влез се прима бројот на кралици и димензии на таблата n. На излез треба да се испечати бројот на уникатни позиции на кои може да ги поставете кралиците со default Backtracking Solver ако бројот на кралици е помал или еднаков на 6. Во спротивно да се испечати само првото решение.
  7.  
  8. Забелешка: За кралиците да не се напаѓаат треба да се провери нивната редица, колона или дијагонала. Не е задолжително да ви поминуваат последните два тест примери за задачата да биде точна. Зависи како сте ги поставиле условите.
  9.  
  10. from constraint import *
  11.  
  12. problem = Problem()
  13.  
  14. if __name__ == '__main__':
  15.  
  16.     n = int(input())
  17.  
  18.     variables = range(1, n + 1)
  19.  
  20.     domains = []
  21.     for i in range(0, n):
  22.         for j in range(0, n):
  23.             domains.append((i, j))
  24.  
  25.     problem.addVariables(variables, domains)
  26.  
  27.     # Da nema duplikati nit pa da se vo ista dijagonala lovcite
  28.     # Lovecot 1 da ne smee da bide vo ista dijagonala, za 2kata ke nemora da se postavi bidejki najaveno e veke
  29.  
  30.     for queen1 in variables:
  31.         for queen2 in variables:
  32.             if queen1 < queen2:
  33.                 problem.addConstraint(lambda q1, q2: q1[0] != q2[0] and q1[1] != q2[1] and abs(q1[0] - q2[0]) != abs(q1[1] - q2[1]), (queen1, queen2))
  34.                 #problem.addConstraint(lambda q1, q2: , (queen1, queen2))
  35.  
  36.     if n <= 6:
  37.         solution = problem.getSolutions()
  38.         print(len(solution))
  39.     else:
  40.         solution = problem.getSolution()
  41.         print(solution)
  42.  
RAW Paste Data