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 : Sélectionner tout - Visualiser dans une fenêtre à part
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