Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- N-Кралици Problem 1 (2 / 13)
- Дадена е nxn табла за шах. Треба да се постават n кралици на таблата така што ниедна кралица да не се напаѓа. Кралиците може да се постават на било која позиција која сметаме дека е најсоодветна. Единственото ограничување е дека не треба да се напаѓаат. Можните придвижувања на кралицата ви се дадени на сликата подолу:
- enter image description here
- На влез се прима бројот на кралици и димензии на таблата n. На излез треба да се испечати бројот на уникатни позиции на кои може да ги поставете кралиците со default Backtracking Solver ако бројот на кралици е помал или еднаков на 6. Во спротивно да се испечати само првото решение.
- Забелешка: За кралиците да не се напаѓаат треба да се провери нивната редица, колона или дијагонала. Не е задолжително да ви поминуваат последните два тест примери за задачата да биде точна. Зависи како сте ги поставиле условите.
- from constraint import *
- problem = Problem()
- if __name__ == '__main__':
- n = int(input())
- variables = range(1, n + 1)
- domains = []
- for i in range(0, n):
- for j in range(0, n):
- domains.append((i, j))
- problem.addVariables(variables, domains)
- # Da nema duplikati nit pa da se vo ista dijagonala lovcite
- # Lovecot 1 da ne smee da bide vo ista dijagonala, za 2kata ke nemora da se postavi bidejki najaveno e veke
- for queen1 in variables:
- for queen2 in variables:
- if queen1 < queen2:
- 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))
- #problem.addConstraint(lambda q1, q2: , (queen1, queen2))
- if n <= 6:
- solution = problem.getSolutions()
- print(len(solution))
- else:
- solution = problem.getSolution()
- print(solution)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement