Algorithme de recherche en largeur
Bonjour, j'ai eu à implémenter un algorithme de recherche en largeur pour un tp d'IA mais il ne fonctionne pas apparemment pour des raisons d'index. Et chaque modification pour changer ça empire les choses. Je viens vers vous en dernier recours. J'ai ecrit dans le code ci-dessous les sections où je pense avoir des erreurs et ce que mes recherches ont donné. Merci d'avance.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| function [ nNodes, closed ] = RechercheEnLargeur( NodeList, RootNode, TargetNode )
closed=zeros(1,100);
open=zeros(1,100);
open=[RootNode]; %liste des noeuds à visiter
closed=[RootNode]; %noeuds visités
nNodes=1;%initialisation du nombre de noeuds parcourus
i=1;
while(~isempty(open)) %tant que NodeList n'est pas vide
CurrentNode=open(1);
for j=1:length(NodeList(i).Neigh) % <- erreur apparemment le fait que la taille de j pose problème
if (NodeList(i).Neigh(j)==TargetNode) %<- erreur (je ne la comprends pas du tout celle là)
break;
end
for k=1:length(closed)
if(~(NodeList(i).Neigh(j)==closed(k))) %si un noeud voisin %<- erreur incoherence d'index entre closed et le champ Neigh de la structure NodeList
%ne correspond pas à un élément déjà visité
open(i+1)= NodeList(i).Neigh(j); %ajouter le voisin à open
end
closed(i+1)= CurrentNode;
end
end
open(1)=[]; %on supprime le premier element de open
i=i+1;
nNodes=nNodes+1;
end |