Дано:
- Nt: общее количество узлов
- M: матрица смежности
- X цвет узла i (0 или 1)
- Nborder: количество узлов некоторого подграфа, называемого границей (граничными узлами являются первые узлы Nborder)
- некоторые ограничения, связанные с моей проблемой с раскраской, которые нет необходимости здесь подробно описывать.
Сначала я хотел проверить график, на котором все граничные узлы будут иметь одинаковый цвет . Это понимание списка, которое я написал для этого ограничения:
Код: Выделить всё
const1 = [sum([X[i]*(1-X[j]) for i in range(Nborder) for j in range(Nborder) ])>=1]
Теперь я хочу взглянуть на эти графы, у которых есть дополнительное следующее свойство:
На границе есть как минимум два узла, у которых есть ровно два соседа. цвета 1.
Поэтому я написал это дополнительное ограничение:
Код: Выделить всё
const2= [sum([(sum([M[i][j]*X[j] for j in range(Nt)]) ==2) for i in range(Nborder)])
Подробнее здесь: [url]https://stackoverflow.com/questions/79017839/using-z3-to-find-graphs-not-conforming-to-property-a-and-property-b[/url]