2010-06-29 4 views
2

J'essaye de mettre en œuvre algorithme de recherche en largeur mais je suis incapable de mettre en œuvre, et je suis un nouvel utilisateur de TCL peut-on m'aider à implémenter cet algorithme en tcl.Mise en œuvre de recherche en largeur tcl

+1

Si vous êtes après tcl, pourquoi avez-vous cette question 'tagué perl' puis? – Zaid

+0

Quelle implémentation d'arbre ou de graphique utilisez-vous? –

+0

Retiré l'étiquette perl ... –

Répondre

3

Je pense que nous avons besoin d'un peu plus de détails avant de pouvoir vous aider. Donc, est-ce qu'on parle d'un graphique, si oui, de quel type? Le plus simple serait un graphe non orienté sans poids de bord, mais est-ce le cas?

Avez-vous une structure de données pour le graphique, si oui, qu'est-ce que c'est?

Enfin, pourquoi réinventez-vous la roue? Tcllib a le paquet struct :: graph qui implémente la largeur de la première recherche, voir la commande walk. Pouvez-vous utiliser ceci ou les algorithmes du paquet struct :: graph :: op pour faire ce que vous voulez.

+0

si le graphique a des cycles peut également être une préoccupation –

+0

Je l'essaie pour graphe non orienté sans poids de bord, je n'ai pas essayé le paquet suggéré ur – Nilesh

+0

Bonjour à tous, Thanx ceux qui tous sont répondu ma première question. J'ai implémenté BFS pour atteindre jusqu'au noeud cible en passant du graphe au noeud final Je stocke tout le noeud (disons le noeud parent) et leurs noeuds sortants (noeuds enfant) dans le tableau de tcl. Mais maintenant je suis incapable de récupérer tous les chemins entre deux nœuds. Wating pour votre réponse ...... – Nilesh

0

Si vous recherchez des fichiers au lieu d'objets génériques, recherchez la commande for_recursive_glob dans le package Tclx. Voici un exemple rapide:

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

Le document ladite utilisation de for_recursive_glob en largeur algorithme. Si vous voulez quitter prématurément (c.-à-trouvé ce que vous cherchez), utilisez la « pause » commande pour quitter la boucle:

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