Реализация поиска в ширину в tcl

Я пытаюсь реализовать алгоритм поиска в ширину, но не могу реализовать, и я новый пользователь TCL. Может ли кто-нибудь помочь мне реализовать этот алгоритм в tcl.


tcl
person Nilesh    schedule 29.06.2010    source источник
comment
Если вам интересен tcl, то почему вы пометили этот вопрос perl?   -  person Zaid    schedule 29.06.2010
comment
Какую реализацию дерева или графа вы используете?   -  person Donal Fellows    schedule 29.06.2010


Ответы (2)


Я думаю, нам нужно немного больше деталей, прежде чем мы сможем помочь.

Итак, речь идет о графе, если да, то о каком? Простейшим был бы неориентированный граф без весов ребер, но так ли это?

Есть ли у вас структура данных для графика, если да, то какая?

Наконец, зачем вы изобретаете велосипед? В Tcllib есть пакет struct::graph, реализующий поиск в ширину, см. команду walk. Можете ли вы использовать этот или алгоритмы в пакете struct::graph::op, чтобы делать то, что вы хотите.

person Jackson    schedule 29.06.2010
comment
имеет ли граф циклы, также может быть проблемой - person jk.; 29.06.2010
comment
Я пытаюсь использовать его для неориентированного графа без весов ребер, я не пробовал пакет, который вы предложили. - person Nilesh; 29.06.2010
comment
Привет всем, Спасибо всем, кто ответил на мой первый вопрос. Я реализовал BFS для достижения целевого узла при переходе от графа к конечному узлу. Я сохраняю все узлы (скажем, родительский узел) и их исходящие узлы (дочерние узлы) в массиве tcl. Но теперь я не могу получить все пути между двумя узлами. Жду вашего ответа...... - person Nilesh; 07.07.2010

Если вы ищете файлы, а не общие объекты, найдите команду for_recursive_glob в пакете Tclx. Вот краткий пример:

package require Tclx
for_recursive_glob fileName {/path/to/dir1 /to/dir2} {*.txt *.doc} { puts $fileName }

В документе говорится, что for_recursive_glob использует алгоритм в ширину. Если вы хотите выйти преждевременно (т. е. нашли то, что искали), используйте команду «break» для выхода из цикла for:

package require Tclx
for_recursive_glob fileName {/path/to/dir1 /to/dir2} {*.txt *.doc} { 
    puts $fileName
    if {[string match *myfile*]} { break }
}
person Hai Vu    schedule 01.07.2010