OK. Значи пълната задача, която имам да реша е следната:
На 4 реда в 24 колони на 3 реда височина има наредени вазлични видове кубчета. От един вид може да има 1 или няколко кубчета.
Има списък с видове кубчета, които трябва последователно да се вземат от този куп за обработка.
Машината, която взема последователно кубчетата, може да ходи само от едната дълга страна и трябва последователно да изпълнява списъка. Ако списъка започва с кубчета 5, 6 и 8, значи машината трябда да вземе първо кубче от вид 5, след това от вид 6 и след това от вид 8 и така нататък всички 288 кубчета по точно определената последователност. Машината може и да премести кубче от едно място на друго, ако това е необходимо.
Трябва да направя така, че машината да изпълни списъка с минимален брой премествания и минимално изминато разстояние.
Програмата не трябва да работи повече от 5 мин.
Най-опростена рекурсия, която обикаля всички възможни решения, работи при мен 5+ часа, така че това не е опция. Явно трябва да се ползва някакъв евристичен метод, който дава бързо и не идеален, сравнително добър вариант.
Ако някой иска нагледно да види нещата, направил съм малко програмче, колкото да се разбере идеята.
няма вируси и коне вътре, правена е на Delphi.
За нещо неясно - питайте...
|