Задача: Во входном файле задана ДНФ. Найти ДНФ, получающуюся из нее применением всех возможных операций обобщенного склеивания (начало алгоритма Блейка). В выходном файле строки, соответствующие ЭК, должны быть упорядочены лексикографически.
ДНФ функции от n переменных задается так: сначала записано n, потом m – число элементарных конъюнкций (далее ЭК), потом m строк, соответствующих конъюнкциям. Каждая ЭК задается строкой длины n без пробелов, где на i-м месте стоит 1, если i-я переменная входит в ЭК без отрицания, 0, если она входит с отрицанием, и *, если она в ЭК не входит. Например, ДНФ функции от 3-х переменных
задается так:
3 2
1*0
*01
(Оффтоп)
подскажите пожалуйста как ставить отрицание и дизъюнкцию
Насколько я понял, обобщенное склеивание выглядит примерно так:
.
Для хранения ДНФ я использую структуру, можно сказать, двумерный массив. Каждая строка соответсвует ЭК. Звездочки я заменяю на
.
Если я сделаю следующее: возьму первый элемент(естественно если он равен 1 или 0) первой строки(буду обозначать его
) и буду смотреть только первые элементы всех последующих строк и, если какой-то из них неравен
(и неравен -1), по операции обобщенного склеивания буду добавлять соответствующие ЭК в конец массива; дальше беру второй элемент первой строки и делаю то же самое, и так далее пока не закончится строка.
Потом "наведу" лексикографический порядок в массиве строк.
Будет ли это означать, что я нашел правильный ответ?
PS пишу я на си