Здравствуйте, Khimik, Вы писали:
K>Продолжение этой темыАвтор: Khimik
Дата: 09.06 17:02
. Есть брутто-формула молекулы, например C6H6. Нужно перебрать все осколки, и далее для каждого осколка перебрать все возможные связи в нём, чтобы проверить – можно ли расставить связи так, чтобы валентность водорода была всегда 1, а валентность углерода от 1 до 4.
K>Т.е. c C6H6 можно сгенерировать осколок CH4 или H2, но нельзя CH5 или H3.
Непонятно. Я не химик, но вроде бы если мы собрали из двух H один H
2, то он уже самостоятельная молекула и прицепить его ни к чему не удастся.
А если мы собрали из одного C и одного H кусочек СH, то из него "торчит" 3 связи C, и можно доприцепить к нему ещё что-то.
Поэтому напрашивается простой алгоритм:
1. Вынимаем из "коробки" атом, и для каждой из его связей
1.1. смотрим — можно ли из оставшихся в коробке что-то к нему прицепить
1.1.1. если да — то прицепляем это что-то, и рекурсивно обращаемся к п.1 — то есть пытаемся к каждой из оставшихся связей что-то прицепить
1.1.2. Если в коробке не осталось атомов, то у нас получилась не молекула, а свободный радикал.
1.1.3. Если у нас кончились связи, а в коробке остались ещё атомы, то мы задачу не решили. Так что нужно вернуть последний прицепленный кусочек в коробку и выйти из рекурсии для перебора следующей попытки.
Начинаем разгребать HHHHHHCCCCCC:
1. достали H
2. .достали второй H
3. ..получилось H
2, но атомов ещё полно — кладём H обратно в коробку и берём следующий
4. .Берём C (очевидно, что пробовать остальные четыре H не имеет смысла, т.к. они дадут тот же результат), получаем CH. У него три "свободных" связи.
5. ..Берём из коробки H, получаем CH
2. У него 2 связи
6. ...Берём из коробки H, получаем CH
3. У него 1 связь
7. ....Берём из коробки H, получаем CH
4. У него нет свободных связей, но атомов ещё полно — кладём H обратно в коробку
8. ....Берём из коробки C, получаем C
2H
3. У него 3 cвязи.
9. .....Берём из коробки H, получаем C
2H
4. У него 2 связи.
10. .....Берём из коробки H, получаем C
2H
5. У него 1 связь.
11. ...... Берём из коробки H, получаем C
2H
6. У него нет свободных связей, но атомов ещё полно — кладём H обратно в коробку.
12. ...... Берём из коробки С, получаем C
3H
5. У него 3
.....
Берём из коробки H, получаем C
6H
6, свободных связей нет, атомов в коробке нет. Задача решена.